Sql 将行转置/透视到列并求和

Sql 将行转置/透视到列并求和,sql,sql-server,tsql,pivot,Sql,Sql Server,Tsql,Pivot,这是我的问题 SELECT * FROM requirementRange PeakRange,DaysOfReq列是nvarchar数据类型,Total是INT数据类型 表如下所示 PeakRange DaysOfReq Total 1 - 3.99 >2 Days 2 9.01+ Day 2 3 1 - 3.99 Day 0 1 4

这是我的问题

SELECT * 
FROM requirementRange
PeakRange
DaysOfReq
列是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 DaysOfReq总计 1-3.99>2天2 9.01+第2天3 1-3.99天0 1 4-5.99天0 1 6-8.99第2天2 第9天01 9.01+第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 泡菜第0天第1天第2天>总共2天 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
在这里,我需要将输出从行转换为列,并找到每个范围的总计并放入最后一列。

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

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;