我有一个包含大约30列的表格,其中包含用户截止日期的各种日期。我想计算日期在1周内(DATEADD(day, +7, GETDATE())
的那些列的数量。
通过简单的示例,这里的数据可能是什么样的(我假设今天GETDATE())
的日期是7/16:
id thisdate thatdate otherdate userid_fk
1 2014-7-25 2014-7-18 2014-7-19 1
2 2014-7-17 2014-7-18 2014-8-15 2
3 2014-6-20 2014-7-17 2014-8-15 1
id count
1 2
3 1
对于用户2:
id count
2 2
我试图设置一个变量并使用Case When和Set增加它,但那些显然不能很好地发挥作用。我也考虑使用Pivot,但似乎无法将我的大脑包裹起来。
响应ps2goat对我的拙劣查询示例的请求:
DECLARE @CT int = 0
SELECT id, SUM(CASE WHEN thisdate> DATEADD(day, -7, GETDATE()) THEN SET @CT += 1 WHEN thatdate > DATEADD(day, -7, GETDATE()) THEN SET @CT += 1 ELSE 0 END) as COUNT FROM dates WHERE userid_fk='1' GROUP BY id
答案 0 :(得分:1)
SELECT id,
(CASE WHEN thisdate BETWEEN getdate() AND DATEADD(day, 7, getdate()) THEN 1 ELSE 0 END +
CASE WHEN thatdate BETWEEN getdate() AND DATEADD(day, 7, getdate()) THEN 1 ELSE 0 END +
CASE WHEN otherdate BETWEEN getdate() AND DATEADD(day, 7, getdate()) THEN 1 ELSE 0 END) AS count
FROM <YOUR_TABLE>