2016-04-13 43 views
1

beklendiği gibi çalışmıyorolması şartı Ben deyimi şu var

select pkid 
from AttendancePosting 
where datename(dw,AttDate) = 'Sunday' and empid=4 and attdate='2015-12-13' 
group by PKId,timeout 
--having 9=9 
having cast(sum((datepart(minute, timeout)))/2 as float)+''=cast(datepart(minute,timeout) as float) +'' 

sorun

having cast(sum((datepart(minute, timeout)))/2 as float)+''=cast(datepart(minute,timeout) as float) +'' 

çalışma Değildir. hem cast(sum((datepart(minute, timeout)))/2 as float) ve cast(datepart(minute,timeout) as float) aynı değeri getirmek ama yine select ifadesi herhangi bir kayıt alma değil, her iki döner 9

Bu

select pkid 
from AttendancePosting 
where datename(dw,AttDate) = 'Sunday' and empid=4 and attdate='2015-12-13' 
group by PKId,timeout 
having 9=9 

Ve getiren kayıtları gibi kontrol ettikten, Herhangi bir yardım takdir edilecektir.

+3

'HAVING' deyiminde' + '' amacı nedir? – Raj

+0

Ben hala çalışmıyor – Alex

cevap

1

İlk olarak, bildiriminiz datepart(minute, timeout)/2 bir tam sayı döndürecektir. SQL Server'ın bu datepart(minute, timeout)/2. gibi daha hassas bir şekilde daha hassas olmasını sağlayabilirsiniz.

İkincisi, kayan nokta sayıları yaklaşık değerlerdir. ROUND()'u kullanmanız ve uygun olduğunu düşündüğünüz ondalık basamak sayısını belirtmeniz daha iyi olur. Örneğin: round(sum((datepart(minute, timeout)))/2.0, 3).

+0

Ben sadece bir kayıt ve böylece bir zaman aşımı dönen '' grup by' düşünüyorum, bu yüzden iki değerlerle eşit zaman – Alex

+0

eşit değil Ben ilk adım 'float' değerleri önlemek için olmalıdır düşünüyorum kesin değildir ve tam olarak eşit olmaları gerektiği gibi görünmelerine rağmen, tam olarak eşit olmayabilirler. – user212514