SQL行の回転、列の回転の簡単な実現


前言
行列変換は、レポートの分析をする時によくあります。今日はどうやって行列の転換ができるかを話しましょう。
行列変換とは、下図のように2つの展示形式の相互変換です。

行を回転
もし次の表があれば、

SELECT *
FROM student
PIVOT (
 SUM(score) FOR subject IN (  ,   ,   )
)
上のSQL文を通じて、次の結果が得られます。

PIVOTの後に集計関数をつけて結果を得ます。FORの後に続く科目は私達が変換する列です。そうすると、科目の中の国語、数学、英語は列に変換されます。INの後に続くのが具体的な科目値です。
もちろんCASE WHENで同じ結果を得ることもできます。書くのが面倒くさいです。

SELECT name,
 MAX(
 CASE
 WHEN subject='  '
 THEN score
 ELSE 0
 END) AS "  ",
 MAX(
 CASE
 WHEN subject='  '
 THEN score
 ELSE 0
 END) AS "  ",
 MAX(
 CASE
 WHEN subject='  '
 THEN score
 ELSE 0
 END) AS "  "
FROM student
GROUP BY name
CASE WHENを用いてPIVOTと同様の結果を得ることができ,PIVOTの簡単な直感性がない。
列の折り返し
次の表studentがあると仮定します。

SELECT *
FROM student1
UNPIVOT (
  score FOR subject IN ("  ","  ","  ")
)
UNPIVOTによって次のような結果が得られます。

私たちも次の方法で同じ結果を得ることができます。

SELECT
  NAME,
  '  ' AS subject ,
  MAX("  ") AS score
FROM student1 GROUP BY NAME
UNION
SELECT
  NAME,
  '  ' AS subject ,
  MAX("  ") AS score
FROM student1 GROUP BY NAME
UNION
SELECT
  NAME,
  '  ' AS subject ,
  MAX("  ") AS score
FROM student1 GROUP BY NAME
締め括りをつける
以上はこの文章の全部の内容です。本文の内容は皆さんの学習や仕事に対して一定の参考学習価値を持ってほしいです。ありがとうございます。