2012-03-27 99 views
2

我想知道是否有可能编写嵌套选择语句?与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你所期望的总和为10。

测试数据:

enter image description here

+0

上传一些数据和删除结果。 – 2012-03-27 15:03:38

+1

您的问题被标记为sql-server,但您的查询不适用于MS SQL Server的有效语法。具体而言,您在SELECT子句中有没有相应GROUP BY的列“description”。你在使用什么数据库平台? – 2012-03-27 15:04:31

+0

你的代码无法工作。除非所有其他字段完全基于变量,否则必须有GROUP BY子句来执行像SUM这样的聚合。你包括[描述],所以你必须对它进行分组。 – Bill 2012-03-27 15:06:19

回答

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这是错误的。我需要SUM。 – 2012-03-27 15:34:10

3

我认为你正在寻找使用COUNT而不是SUM。

+0

和做什么? – 2012-03-27 15:07:37

+0

SUM合计列的值。 COUNT实际上会统计行数。 – wachpwnski 2012-03-27 15:14:48