簡體   English   中英

Teradata中的SQL透視

[英]SQL Pivoting in Teradata

我需要將行轉換為多個輸出列。

我有2個表,我需要合並並生成保存在此處的第三個表。

在此處輸入圖片說明

CREATE MULTISET TABLE TAG
( TAG VARCHAR(100), 
  ID VARCHAR(100)
) PRIMARY INDEX (TAG,ID);

INSERT INTO TAG VALUES('L2250','I14299');
INSERT INTO TAG VALUES('L2250','I14300');
INSERT INTO TAG VALUES('L2250','I14301');

CREATE MULTISET TABLE IDS
( ID VARCHAR(100),
  TYPE VARCHAR(100),
  DESCR VARCHAR(100)
) ;

INSERT INTO IDS VALUES ('I14299','Exposure','Bills');
INSERT INTO IDS VALUES ('I14299','Exposure','Certificates');
INSERT INTO IDS VALUES ('I14299','Exposure','NCDS');
INSERT INTO IDS VALUES ('I14300','Currency','GB');
INSERT INTO IDS VALUES ('I14300','Currency','AU');
INSERT INTO IDS VALUES ('I14301','Rate','NOT FIXED');
INSERT INTO IDS VALUES ('I14301','Rate','FIXED');

既不是樞軸也不是樞軸,您要創建不同類型的所有可能組合:

SELECT *
FROM 
 ( SELECT t.tag, i.descr AS I14299
   FROM tag AS t JOIN ids AS i
     ON t.id = i.id
   WHERE i.id = 'I14299'
 ) AS e
CROSS JOIN
 ( SELECT descr AS I14300
   FROM ids
   WHERE id = 'I14300'
 ) AS c
CROSS JOIN
 ( SELECT descr AS I14301
   FROM ids
   WHERE id = 'I14301'
 ) AS r

如果您需要對其他標簽執行此操作,則可以切換到:

SELECT e.*, c.descr, r.descr
FROM 
 ( SELECT t.tag, i.descr AS I14299
   FROM tag AS t JOIN ids AS i
     ON t.id = i.id
   WHERE t.id = 'I14299'
 ) AS e
JOIN
 ( SELECT t.tag, descr AS I14300
   FROM tag AS t JOIN ids AS i
     ON t.id = i.id
   WHERE t.id = 'I14300'
 ) AS c
ON e.tag = c.tag   
JOIN
 ( SELECT t.tag, descr AS I14301
   FROM tag AS t JOIN ids AS i
     ON t.id = i.id
   WHERE t.id = 'I14301'
 ) AS r
ON e.tag = r.tag

當然,這會對ID進行硬編碼,如果要動態創建ID,則需要在存儲過程中使用動態SQL。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM