14章その他

この章で説明するクエリは、既存の章に入れるには内容が長いか、解決する問題が現実的なものではなくて楽しいものです。この章は 「楽しい」ものにしたので、紹介するレシピが、読者の現実の問題に応用できるかどうかにはわかりません。しかし、このクエリは面白いので、ぜひ本書で扱いたいと思いました。

レシピ14.1 SQL ServerのPIVOT演算子を使ってクロス集計レポートを作成する

問題

結果セットの行を列に変換するクロス集計レポートを作成したい。従来の変換(ピボット)方法は知っているが、違う方法を試してみたい。特に、CASE式や結合を使わずに次のような結果セットを返したい。

DEPT_10     DEPT_20     DEPT_30    DEPT_40
------- ----------- ----------- ----------
      3           5           6          0

解決策

PIVOT演算子を使って、CASE式や結合を追加せずに求められている結果セットを作成します。

select [10] as dept_10,
       [20] as dept_20,
       [30] as dept_30,
       [40] as dept_40
  from (select deptno, empno from emp) driver  ❶
 pivot (
       count(driver.empno)
       for driver.deptno in ([10],[20],[30],[40])  ❷
       ) as empPivot

解説

PIVOT演算子は最初は奇妙に思えるかもしれませんが、この演算子が解決策の中で行う演算は、以下に示すもっとなじみのある転置クエリと技術的には同じです。

select sum(case deptno ...

Get SQLクックブック 第2版 ―データベースエキスパート、データサイエンティストのための実践レシピ集 now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.