E_ID Full_name Dept fy_week fy_rev
45 Tom Smith Sales 201801 100
65 Mike Tod Marketing 201801 50
12 Chris Thomson Sales 201803 60
85 Paul Henry Sales 201804 40
32 Mich Dowell Sales 201802 50
65 Mike Tod Marketing 201803 70
12 Chris Thomson Sales 201802 80
85 Paul Henry Sales 201803 90
我在 SQL 表中有上述数据。我可以通过没有 Total 列的 Dynamic Pivot 查询创建下表。在数据透视列之前需要总计列,底部需要总计行。
E_ID Full_name Dept Total 201801 201802 201803 201804
12 Chris Thomson Sales $140 $0 $80 $60 $0
32 Mich Dowell Sales $50 $0 $50 $0 $0
45 Tom Smith Sales $100 $100 $0 $0 $0
65 Mike Tod Marketing $120 $50 $0 $70 $0
85 Paul Henry Sales $130 $0 $0 $90 $40
Total $540 $150 $130 $220 $40
过去曾提出过类似的问题,但我未能根据我的要求进行重构。这是我的代码:
DECLARE
@cols AS NVARCHAR(MAX), @query AS NVARCHAR(MAX);
SET @cols = STUFF((SELECT distinct ',' + QUOTENAME(fy_week) y
FROM my_sample_table z
ORDER BY y asc
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query = 'SELECT e_id, full_name, dept, ' + @cols + '
from ( select e_id, full_name, dept from my_sample_table ) x
pivot
( Sum(fy_rev) for fy_week in (' + @cols + ')) p '
execute(@query)