

こんにちは。下記イメージのようにSQLでテーブルを転置したいです。 pivot, unpivot
を調べて試しましたが、上手く実現できませんでした。どのようなSQLを書けばよいでしょうか？ なお、UNION ALLで強引に転置する方法は成功しました。  
何卒ご教示お願い致します。

# イメージ

転置前  
[![転置前](https://i.stack.imgur.com/saWkF.png)](https://i.stack.imgur.com/saWkF.png)

転置後  
[![転置後](https://i.stack.imgur.com/7oV8N.png)](https://i.stack.imgur.com/7oV8N.png)

比較  
[![画像の説明をここに入力](https://i.stack.imgur.com/wcgBR.png)](https://i.stack.imgur.com/wcgBR.png)

# サンプルのテーブルを作るSQL例

[code]

    CREATE TABLE {{table path}} (
      YYYY STRING,
      MM STRING,
      ratioIndex1 FLOAT64,
      ratioIndex2 FLOAT64,
      ratioIndex3 FLOAT64
    )
    
    
    INSERT INTO {{table path}}
    VALUES
    
    ('2021', '04', 0.51, 1.00, 0.00),
    ('2022', '04', 0.30, 0.54, 0.07),
    ('2021', '03', 0.52, 1.00, 0.00),
    ('2022', '03', 0.30, 0.54, 0.08),
    ('2021', '02', 0.51, 1.00, 0.00),
    ('2022', '02', 0.31, 0.55, 0.08),
    ('2021', '07', 0.44, 1.00, 0.00),
    ('2022', '07', 0.24, 0.48, 0.06),
    ('2021', '05', 0.50, 1.00, 0.00),
    ('2022', '05', 0.30, 0.54, 0.06),
    ('2021', '06', 0.46, 1.00, 0.00),
    ('2022', '06', 0.26, 0.50, 0.06),
    ('2021', '11', 0.36, 1.0, 0.000),
    ('2022', '11', 0.18, 0.38, 0.05),
    ('2021', '12', 0.29, 1.00, 0.00),
    ('2022', '12', 0.14, 0.31, 0.06),
    ('2021', '10', 0.39, 1.00, 0.00),
    ('2022', '10', 0.21, 0.42, 0.06),
    ('2021', '01', 0.53, 1.00, 0.00),
    ('2022', '01', 0.32, 0.55, 0.09),
    ('2021', '09', 0.41, 1.00, 0.00),
    ('2022', '09', 0.21, 0.44, 0.06),
    ('2021', '08', 0.40, 1.00, 0.00),
    ('2022', '08', 0.22, 0.45, 0.06)
    
[/code]

# 参考

下記 pivot, unpivotを使う方法は失敗しました（UNION ALLで強引に転置する方法は成功しました）

<https://stackoverflow.com/questions/13372276/simple-way-to-transpose-columns-
and-rows-in-sql>

[code]

    select YYYY, ratioIndex, _01, _02, _03
    from
    (
      select YYYY, MM,  ratioIndex, value
      from (select CONCAT('_', MM) as MM, * EXCEPT(MM) from `{{table path}}`)
      unpivot
      (
        value for ratioIndex in (ratioIndex1, ratioIndex2, ratioIndex3)
      ) unpiv
    ) src
    pivot
    (
      sum(value) as value
      for ratioIndex in ('_01', '_02', '_03')
    ) piv
    
[/code]

=> Unrecognized name: ratioIndex


CC BY-SA 4.0
2023-01-10T08:57:04.363
93286
2023-01-10T12:14:46.237
2023-01-10T12:14:46.237
3060
56490
question
mysql sql postgresql google-bigquery
SQLでテーブルの一部行列をpivot, unpivotで転地したい