2016-08-09 6 views
0

このピボットクエリの実行方法については頭を悩ますことはできません。私はいくつかのバリエーションを試しましたが、私はエラーが発生し続けます!サマリーデータを使用したSQLピボットクエリ

私はこのデータを持っている:

ID OfficerAge CitizenAge 
1  35    21 
2  36    33 
3  22    18 

と私は簡単に一人一人のための年齢層を得ることができますが、私は行列をしたい:

Officer/Citizen: Under 19 20-29 30-39 
Under 19   0   0  0 
20-29    1   0  0 
30-39    0   1  1 

私が正しく構築されたクエリを得ることにどのような援助に感謝!!

ありがとうございました!

答えて

2

だけ集約を使用してクエリを作成:

select (case when officerage < 19 then 'Under 19' 
      when officerage < 30 then '19-29' 
      when officerage < 40 then '30-39' 
      else 'old!' 
     end) as officeragegrp, 
     sum(case when citizenage < 19 then 1 else 0 end) as [Under 19], 
     sum(case when citizenage >= 19 and citizenage < 30 then 1 else 0 end) as [19-29], 
     sum(case when citizenage >= 30 and citizenage < 40 then 1 else 0 end) as [30-39], 
     sum(case when citizenage > 39 then 1 else 0 end) as [Old!] 
from t 
group by (case when officerage < 19 then 'Under 19' 
       when officerage < 30 then '19-29' 
       when officerage < 40 then '30-39' 
       else 'old!' 
      end) 
order by min(officerage); 

はEDIT:

あなたが存在しなくてもグループを含める必要がある場合は、left joinができます:

select officeragegroupp, 
     sum(case when citizenage < 19 then 1 else 0 end) as [Under 19], 
     sum(case when citizenage >= 19 and citizenage < 30 then 1 else 0 end) as [19-29], 
     sum(case when citizenage >= 30 and citizenage < 40 then 1 else 0 end) as [30-39], 
     sum(case when citizenage > 39 then 1 else 0 end) as [Old!] 
from (select 'Under 19' as officeragegroup union all 
     select '19-29' union all 
     select '30-39' union all 
     select 'old!' 
    ) oag left join 
    (select t.*, 
      (case when officerage < 19 then 'Under 19' 
        when officerage < 30 then '19-29' 
        when officerage < 40 then '30-39' 
        else 'old!' 
       end) as officeragegroup 
     from t 
    ) t 
    on t.officeragegroup = oag.officeragegroup 
group by oag.officeragegroup 
order by min(t.officerage); 
+0

ナイス!しかし、0歳以上の[19歳未満]の年齢層は含まれていません。 (値が0より大きい場合はそれを含めることを意味しますが、ええ) –

関連する問題