2

これが私のクエリです

SELECT * 
FROM requirementRange

PeakRangeDaysOfReq列は nvarchar データ型で、TotalINT データ型です

表は以下のようなものです

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 日 0 1
9.01+ 日 0 1

期待される結果

PeakRange 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 に答える