【发布时间】:2021-08-09 13:03:53
【问题描述】:
我是动态 SQL 的新手。我有下表:
| CustName | Date | Hours |
|---|---|---|
| First | 01/01/2021 | 12 |
| Second | 01/01/2021 | 10 |
| Second | 05/02/2021 | 1 |
| Second | 10/11/2021 | 14 |
我正在尝试为过去 12 个月的总小时数制作一个滚动日历 Pivot。
这是我做的代码:
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX)
select @cols = STUFF(
(SELECT distinct ',' + QUOTENAME(DATENAME(mm,Date) + ' of '
+ DATENAME(year,Date)) AS months_ago
FROM [TimeEntryList]
WHERE Date > DATEADD(year, -1,
DATEFROMPARTS(YEAR(GETDATE()), MONTH(GETDATE()), 1))
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query = 'SELECT CustName, ' + @cols + '
from ( select
[CustName],
datename(mm,[Date])+'' of ''+datename(year,[Date])AS
months_ago, [Hours] AS NetQty
from [TimeEntryList]
WHERE [Date] > DATEADD(year, -1,
DATEFROMPARTS(YEAR(GETDATE()), MONTH(GETDATE()), 1))
) as source
pivot
(
sum(NetQty) For months_ago in (' + @cols + ')
) as PivotTable'
execute sp_executesql @query;
这“有点”我想要的效果,但列不是从当前日期倒序排列的。
我希望它从当前月份开始倒数。因此,如果这个月是 8 月,那将是:
| CustName | Sep 2020 | .... months | August 2021 |
|---|---|---|---|
| First | 12 | 14 | |
| Second | 3 | 12 |
有没有一种好方法可以从 Dynamic SQL 中的当前月份开始,然后返回 12 个月?
我试过'order by months_ago desc'等,但这不起作用
【问题讨论】:
标签: sql sql-server pivot dynamic-sql