2012-03-27 2 views
2

Я хотел бы знать, можно ли его написать вложенный выборочный статус?вложенный оператор select с SUM

У меня есть следующие вычисляющий заказанное время:

SELECT description, SUM(ts.booked_time) AS booked_time_total, 
CONVERT(VARCHAR(11), @testDate, 106) AS month_name, @week_ref AS week_ref 
FROM timesheets ts 

WHERE @testDate <= convert(datetime, end_dtm, 120) and 
     dateadd(wk, 1, @testDate) > convert(datetime, start_dtm, 120) 

Но заказанной время, как представляется, не так. Не предполагается, что SUM рассчитывает общее количество для каждой строки, которая находится в пределах start_dtm и end_dtm. Так что, если у меня есть 10 строк с 1 в заказанное время вы ожидали бы SUM быть тестовыми данными 10.

:

enter image description here

+0

Загрузите данные и идите в нужный результат. –

+1

Ваш вопрос помечен как sql-server, но ваш запрос недействителен для MS SQL Server. В частности, у вас есть описание столбца в предложении SELECT без соответствующей GROUP BY. Какую платформу базы данных вы используете? –

+0

Ваш код не может работать. Для выполнения агрегатов, таких как SUM, должно быть предложение GROUP BY, если только все остальные поля не полностью основаны на переменных. Вы включили [описание], поэтому вам нужно сгруппировать его. – Bill

ответ

4

SUM рассчитывает общее значение полей, в то время как COUNT - общее количество записей.

SELECT description, 
     COUNT(ts.booked_time) AS booked_time_total, 
     CONVERT(VARCHAR(11), @testDate, 106) AS month_name, 
     @week_ref AS week_ref 
FROM timesheets ts 
WHERE @testDate <= convert(datetime, end_dtm, 120) and 
     dateadd(wk, 1, @testDate) > convert(datetime, start_dtm, 120) 
+0

, так что если у меня есть 5 строк с 2 в забронированное время, будет отображаться только 5, что неверно. Мне нужен СУММ. –

3

Я думаю, что вы хотите использовать COUNT вместо SUM.

+0

какая сумма делает? –

+0

SUM добавляет значения столбцов. COUNT будет фактически считать строки. – wachpwnski