【发布时间】:2020-01-28 07:43:58
【问题描述】:
我有一个这样的查询,我需要根据列来调整我的where语句,请看下面的查询:
SELECT
b.id as [ID]
,d.[Title] as [Title]
,e.Class as [Class]
,Sum(a.col1) as [Last 30 Days Col1]
,Sum(a.col2) as [Last 30 Days Col2]
,Sum(a.col1) as [Last 90 Days Col1]
,Sum(a.col2) as [Last 90 Days Col2]
,Sum(a.col1) as [Last 365 Days Col1]
,Sum(a.col2) as [Last 365 Days Col2]
FROM
tb1 a
INNER JOIN
tb2 b -- ON anything
INNER JOIN
tb3 c -- ON anything
INNER JOIN
tb4 d -- ON anything
INNER JOIN
tb5 e -- ON anything
WHERE
a.DateCol >= DATEADD(MONTH, -1, GETDATE())
GROUP BY
b.id, d.Title, e.Class
我目前得到的结果是这样的:
时间:
其中 a.DateCol >= DATEADD(MONTH,-1,GETDATE()) => 过去 30 天 Col1 = 过去 90 天 Col1 = 过去 365 天 Col1 = 10
时间:
其中 a.DateCol >= DATEADD(QUARTER,-1,GETDATE()) => 过去 30 天 Col1 = 过去 90 天 Col1 = 过去 365 天 Col1 = 100
时间:
其中 a.DateCol >= DATEADD(YEAR,-1,GETDATE()) => 过去 30 天 Col1 = 最后 90 天 Col1 = 过去 365 天 Col1 = 1000
ID | Title | Class | Last 30 Days Col1 | Last 30 Days Col2 | Last 90 Days Col1 | Last 90 Days Col2 | Last 365 Days Col1 | Last 365 Days Col2
--------------------------------------------------------------------------------------------------------------------------------------
1 | T1 | C1 | 10 | 20 | 10 | 20 | 10 | 20
但正如您所猜测的,我需要每列显示正确的值,我不知道如何更改我的查询来实现这一点,因为我有一个固定的 where 语句。关于如何根据 30,90 和 365 天调整 where 语句并相应地在正确列中显示正确值的任何想法?
【问题讨论】:
-
您已将条件放入 sum 而不是 where 子句,例如: sum(CASE WHEN a.DateCol >= DATEADD(MONTH,-1,GETDATE()) THEN a.col1 ELSE 0 END) 类似下一列
-
@SundarSingh 感谢您的解决方案按预期工作。请您发布一个答案以便我接受吗?
标签: sql sql-server