我有一个SQL查询,它正在创建一个PIVOT表。
就这个。
SELECT *
FROM (
SELECT
Name
,Year
,sum(Payment) as TotalPayment
FROM Orders
group by Name,Date
) as Tablo
PIVOT
(
SUM(TotalPayment)
FOR Date IN ([2009-11],[2009-12],[2010-01])
)
AS p
这是月度总付款和编写此查询的人每月手动添加年月。我需要动态地做。
如何使用带有循环的SQL查询或类似的东西从表中动态获取月份?
谢谢你的帮助!
我建议你使用relative
时间而不是absolute
。通过这种方式,您的查询始终是最新的。在这里,我在SQL Fiddle上发布了一个样本
MS SQL Server 2014架构设置:
create table t ( d date, i int );
insert into t values
( '2016-01-01', 100 ),
-- ... some other data
( '2017-12-13', 100 );
我使用CTE逐步编写查询:
with
cooked as --change to relative months (from today)
( select datediff(MONTH,getdate(), d ) as dif, i
from t
),
filtered as --just take the last 12 months
( select dif as Date, i as TotalPayment
from cooked
where dif > -12
)
select * --pivoting
from filtered
PIVOT
(
SUM(TotalPayment)
FOR Date IN ([-11],[-10],[-9],[-8],
[-7],[-6],[-5],[-4],
[-3],[-2],[-1],[0])
)
AS p
在这里Results,其中[0]
意味着这个飞蛾和[-11]
意味着12个月前:
| -11 | -10 | -9 | -8 | -7 | -6 | -5 | -4 | -3 | -2 | -1 | 0 |
|-----|-----|-----|-----|-----|-----|-----|-----|-----|-----|-----|-----|
| 500 | 500 | 100 | 100 | 100 | 100 | 100 | 100 | 100 | 100 | 100 | 100 |