将转置/透视行转换为列和求和

时间:2013-08-19 20:24:53

标签: sql sql-server tsql pivot

这是我的查询

SELECT * 
FROM requirementRange

PeakRangeDaysOfReq列是nvarchar数据类型,Total是INT数据类型

表格如下

PeakRange           DaysOfReq     Total
1 - 3.99             >2 Days        2
9.01+                 Day 2         3
1 - 3.99              Day 0         1
4 - 5.99              Day 0         1
6 - 8.99              Day 2         2
9                     Day 0         1
9.01+                 Day 0         1

预期结果

PeakRange        Day 0    Day 1  Day 2   >2 Days   Total
1 - 3.99           1       0      0         2        3
4 - 5.99           1       0      0         0        1
6 - 8.99           0       0      2         0        2
9                  1       0      0         0        1
9.01+              1       0      3         0        4

在这里,我需要将输出从行转换为列,以及查找总数并放置在每个范围的最后一列中。

1 个答案:

答案 0 :(得分:1)

您应该可以使用类似于以下内容的内容:

select 
  peakrange,
  coalesce([Day 0], 0) [Day 0], 
  coalesce([Day 1], 0) [Day 1], 
  coalesce([Day 2], 0) [Day 2],
  coalesce([>2 Days], 0) [>2 Days],
  peak_Total
from
(
  select peakrange, daysofreq, total,
    sum(total) over(partition by PeakRange) peak_Total
  from requirementRange
) d
pivot
(
  sum(total)
  for daysofreq in ([Day 0], [Day 1], [Day 2],
                    [>2 Days])
) piv
order by peakrange;

请参阅SQL Fiddle with Demo