2

这是我的查询

SELECT * 
FROM requirementRange

PeakRange,DaysOfReq列是 nvarchar 数据类型并且Total是 INT 数据类型

表如下

峰值范围 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 天 0 1
9.01+ 第 0 天 1

预期结果

峰值范围 第 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

在这里,我需要将输出从行转换为列,并找到总计并将其放在每个范围的最后一列中。

4

1 回答 1

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

于 2013-08-19T20:29:50.407 回答