Sql server 显示超过周的查询

Sql server 显示超过周的查询,sql-server,tsql,Sql Server,Tsql,如果这是重复的,我很抱歉,但我已经找了一个小时了,还没有找到解决方案 如果我有以下疑问: SELECT [Count]=COUNT([d.ccode]) ,[Code]=([d.ccode]) FROM lntmuid.document d WHERE (DateDiff(WEEK, [d.date], GETDATE()) = 237) AND staff = 'MF' AND ccode = 'SUM' GROUP BY d.ccode 这给了我一周的记录数。我是否可以生成如下记录集:

如果这是重复的,我很抱歉,但我已经找了一个小时了,还没有找到解决方案

如果我有以下疑问:

SELECT 
 [Count]=COUNT([d.ccode])
,[Code]=([d.ccode])
FROM lntmuid.document d
WHERE (DateDiff(WEEK, [d.date], GETDATE()) = 237)
AND staff = 'MF'
AND ccode = 'SUM'
GROUP BY d.ccode
这给了我一周的记录数。我是否可以生成如下记录集:

╔═════════╦═══════╗
║ Week Of ║ Count ║
╠═════════╬═══════╣
║ 1/1/10  ║   100 ║
║ 1/7/10  ║    50 ║
║ 1/14/10 ║    80 ║
║ 1/21/10 ║    70 ║
║ 1/28/10 ║   120 ║
║ etc …   ║       ║
╚═════════╩═══════╝ 

感谢您的帮助

您可以通过以下方式获得一周的第一天:

SELECT DATEADD(WEEK, DATEDIFF(WEEK, '19000101', GETDATE()), '19000101');
逻辑是简单地获取给定日期(上面的GETDATE()中)和固定日期之间的周数,然后将周数加回到固定日期,因为
DATEDIFF
只计算周边界,它将为给定日期提供一周的第一天

然后,只需将日期字段替换为上述字段,并将表达式添加到GROUPBY子句中:

SELECT WeekOf = DATEADD(WEEK, DATEDIFF(WEEK, '19000101', [d.date]), '19000101')
        ,[Count]=COUNT([d.ccode])
FROM lntmuid.document d
WHERE staff = 'MF'
AND ccode = 'SUM'
GROUP BY DATEADD(WEEK, DATEDIFF(WEEK, '19000101', [d.date]), '19000101');
您还将看到此方法被用作:

SELECT DATEADD(WEEK, DATEDIFF(WEEK, 0, GETDATE()), 0);
这是完全相同的,但使用0到
1900-01-01
的隐式转换,而不是显式键入它以节省一点时间。我倾向于在我的代码中使用这种方法,但我觉得使用日期可以让Stackoverflow的答案更加清晰