2016-04-13 2 views
1

я следующее заявлениеИмея пункт не работает, как ожидалось

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) +'' 

Проблема заключается в том

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

Не работает. как cast(sum((datepart(minute, timeout)))/2 as float) и cast(datepart(minute,timeout) as float) принести такое же значение, но все-таки оператор выбора не извлечение каких-либо записей, как возвращается 9

Я проверил, как этот

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

И его приносящих записей, любая помощь будет оценена.

+3

Какова цель '+ ''' в разделе 'HAVING'? – Raj

+0

Я удалил его все еще не работая – Alex

ответ

1

Во-первых, ваше заявление datepart(minute, timeout)/2 собирается вернуть целое число. Вы можете сделать SQL Server более точным, точнее, как это datepart(minute, timeout)/2..

Во-вторых, числа с плавающей запятой являются приблизительными. Вам лучше использовать ROUND() и указать количество десятичных знаков, которое, по вашему мнению, уместно. Например: round(sum((datepart(minute, timeout)))/2.0, 3).

+0

Я думаю, что 'group by 'возвращает только одну запись и поэтому один тайм-аут, поэтому при делении на два значения не равны – Alex

+0

Я думаю, что ваш первый шаг должен состоять в том, чтобы избежать значений' float', потому что они не точны и, хотя они выглядят так, как будто они должны быть ровно равными, они могут быть не совсем равными. – user212514