计算日期+7天的列数

时间:2014-07-16 07:21:32

标签: sql sql-server-2008

我有一个包含大约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

期望结果

对于用户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

1 个答案:

答案 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>