17.10 - 例: <column_value_list> の値を持つ列に名前を付ける - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - SQL関数、式、および述部

Product
Advanced SQL Engine
Teradata Database
Release Number
17.10
Release Date
2021年7月
Content Type
プログラミング リファレンス
Publication ID
B035-1145-171K-JPN
Language
日本語 (日本)

この例では、SELECT文は列に明示的に使用する名前を指定しません。列の名前は、集約された列名を<column_value_list>値に追加することにより内部で構築されます。

SELECT *
FROM star1 PIVOT (SUM(sales) AS ss1, SUM(cogs) AS sc FOR (yr, qtr)
                                                  IN ((2001, ‘Q1’),
                                                      (2001, ‘Q2’),
                                                      (2001, ‘Q3’))
                                                     )Tmp;

これは、CASE文を使用する同等のSELECTクエリーとして書き換えられます。

SELECT *  FROM  (SELECT country ,state ,
SUM(CASE WHEN yr =  2001 AND  qtr =  'Q1' THEN sales ELSE NULL END) AS "2001_'Q1'_ss1" ,
SUM(CASE WHEN yr =  2001 AND  qtr =  'Q1' THEN cogs ELSE NULL END) AS "2001_'Q1'_sc",
SUM(CASE WHEN yr =  2001 AND  qtr =  'Q2' THEN sales ELSE NULL END) AS "2001_'Q2'_ss1" ,
SUM(CASE WHEN yr =  2001 AND  qtr =  'Q2' THEN cogs ELSE NULL END) AS "2001_'Q2'_sc",
SUM(CASE WHEN yr =  2001 AND  qtr =  'Q3' THEN sales ELSE NULL END) AS "2001_'Q3'_ss1",
SUM(CASE WHEN yr =  2001 AND  qtr =  'Q3' THEN cogs ELSE NULL END) AS "2001_'Q3'_sc"
FROM star1 GROUP BY country ,state ) Tmp ;

ピボット出力テーブル:

country state 2001_'Q1'_ss1 2001'_'Q1'_sc 2001_'Q2'_ss1 2001_'Q2'_sc 2001_'Q3'_ssl 2001_'Q3'_sc
------- ----  ------------- ------------- ------------- ------------ ------------- ------------
USA     CA               30            15            50           20            ?             ?
USA     NY               45            25             ?            ?            ?             ?
Canada  ON                ?             ?            10            0            ?             ?
Canada  BC                ?             ?             ?            ?           10             0