BigQueryで横持ちデータを縦持ちに変換する

URL
bq_transpose
Created
2021/1/31 8:17
Tags
縦持ちを横持ちにするのであれば、SELECTでカラム名を増やせば良い。
その後maxやdistinctを取るなど、工夫が必要になるが。
 
一方で横持ちを縦持ちにする場合、結論から言ってしまうとSQLにおいてUNIONをしまくるのが、最も楽だと思う。
いま、商品ごとに色違いの画像URLが9種類あるとする。
main_tableにはitemid(商品)×colorname(色)およびそのURLが横に格納されており、それをitemid × colornameを一行ごとにユニークとして、各URLを縦持ちで取得することを考える。
SELECT
  itemid
, colorname
, image_url

FROM
  (
  SELECT
    itemid
  , colorname_1 as colorname
  , image_url_1 as image_url

  FROM `main_table`

  UNION ALL

  SELECT
    itemid
  , colorname_2 as colorname
  , image_url_2 as image_url

  FROM `main_table`

  UNION ALL

  SELECT
    itemid
  , colorname_3 as colorname
  , image_url_3 as image_url

  FROM `main_table`

  UNION ALL

  SELECT
    itemid
  , colorname_4 as colorname
  , image_url_4 as image_url

  FROM `main_table`

  UNION ALL

  SELECT
    itemid
  , colorname_5 as colorname
  , image_url_5 as image_url

  FROM `main_table`

  UNION ALL

  SELECT
    itemid
  , colorname_6 as colorname
  , image_url_6 as image_url

  FROM `main_table`

  UNION ALL

  SELECT
    itemid
  , colorname_7 as colorname
  , image_url_7 as image_url

  FROM `main_table`

  UNION ALL

  SELECT
    itemid
  , colorname_8 as colorname
  , image_url_8 as image_url

  FROM `main_table`

  UNION ALL

  SELECT
    itemid
  , colorname_9 as colorname
  , image_url_9 as image_url

  FROM `main_table`
  )

where 1=1
  and colorname is null

order by
  itemid
SQL