この例では、次の定義と内容を持つstar1テーブルを使用します。
CREATE TABLE star1(country VARCHAR(20),state VARCHAR(10), yr INTEGER,qtr VARCHAR(3),sales INTEGER,cogs INTEGER); SELECT * FROM star1; country state yr qtr sales cogs ------- ----- ----------- --- ----------- ----------- USA CA 2001 Q1 30 15 Canada ON 2001 Q2 10 0 Canada BC 2001 Q3 10 0 USA NY 2001 Q1 45 25 USA CA 2001 Q2 50 20
この例では、INリストには別名が含まれます。これらの別名は集約関数によって指定された別名と連結され、出力ピボット テーブルの列名を構成します。
SELECT * FROM star1 PIVOT ( SUM(sales) as ss1, SUM(cogs) as sc FOR qtr IN (‘Q1’ AS Quarter1, ‘Q2’ AS Quarter2, ‘Q3’ AS Quarter3) )Tmp;
出力は、CASE文を使用して同等のSELECTクエリーとして書き換えられます。
SELECT * FROM (SELECT country ,state ,yr , SUM(CASE WHEN qtr = 'Q1' THEN sales ELSE NULL END )AS Quarter1_ss1, SUM(CASE WHEN qtr = 'Q1' THEN (cogs) ELSE NULL END )AS Quarter1_sc, SUM(CASE WHEN qtr = 'Q2' THEN (sales) ELSE NULL END)AS Quarter2_ss1, SUM(CASE WHEN qtr = 'Q2' THEN (cogs) ELSE NULL END)AS Quarter2_sc, SUM(CASE WHEN qtr = 'Q3' THEN (sales) ELSE NULL END)AS Quarter3_ss1, SUM(CASE WHEN qtr = 'Q3' THEN (cogs) ELSE NULL END)AS Quarter3_sc FROM star1 GROUP BY country ,state ,yr ) Tmp ;
ピボット出力テーブル:
country state yr Quarter1_ss1 Quarter1_sc Quarter2_ss1 Quarter2_sc Quarter3_ssl Quarter3_sc ------- ---- ---- ------------ ----------- ------------ ----------- ------------ ----------- USA CA 2001 30 15 50 20 ? ? USA NY 2001 45 25 ? ? ? ? Canada ON 2001 ? ? 10 0 ? ? Canada BC 2001 ? ? ? ? 10 0