2016-02-03 43 views
-1

發現在工作中我一直在考慮,我聽說是「簡單明瞭」任務,但我有困難:列關鍵字在意見欄中

我有一個包含4視圖專欄,PK,FK,評論和專欄#4。我的經理告訴我要製作一個包含75個左右關鍵字的表格,然後是一個查詢,這個查詢將遍歷視圖中的每一行,將註釋與關鍵字表格進行比較,然後將每個找到的關鍵字附加到第4列。我搜索了谷歌和所以,並沒有發現一個查詢會做到這一點。任何幫助,將不勝感激。

回答

1

請嘗試以下。我是Teradata的新手。

--*************************************************************** 
DROP TABLE x; 
--*************************************************************** 
CREATE MULTISET VOLATILE TABLE x, NO FALLBACK, 
CHECKSUM = DEFAULT, 
LOG 
(
RCD_ID INTEGER, 
FK INTEGER, 
CMT VARCHAR(200), 
COL_4 VARCHAR(200), 
RN INTEGER 
) 
PRIMARY INDEX (RCD_ID) 
ON COMMIT PRESERVE ROWS; 
--*************************************************************** 
INSERT INTO x VALUES (1,10,'DID YOU SEE THE COW?','',0); 
INSERT INTO x VALUES (2,20,'DID YOU SEE THE CAT?','',0); 
INSERT INTO x VALUES (3,30,'DID YOU SEE THE FOX?','',0); 
INSERT INTO x VALUES (4,40,'DID YOU SEE THE GOAT, FOX, AND CAT?','',0); 
INSERT INTO x VALUES (5,50,'DID YOU SEE THE DUCK AND THE COW?','',0); 
--*************************************************************** 
SELECT * FROM x ORDER BY 1; 
--*************************************************************** 
DROP TABLE y; 
--*************************************************************** 
CREATE MULTISET VOLATILE TABLE y, NO FALLBACK, 
CHECKSUM = DEFAULT, 
LOG 
(
RCD_ID INTEGER, 
KEY_WORD VARCHAR(20) 
) 
PRIMARY INDEX (RCD_ID) 
ON COMMIT PRESERVE ROWS; 
--*************************************************************** 
INSERT INTO y VALUES (1,'COW'); 
INSERT INTO y VALUES (2,'CAT'); 
INSERT INTO y VALUES (3,'FOX'); 
INSERT INTO y VALUES (4,'GOAT'); 
INSERT INTO y VALUES (5,'DUCK'); 
--*************************************************************** 
SELECT * FROM y ORDER BY 1; 
--*************************************************************** 
DROP TABLE z; 
--*************************************************************** 
CREATE MULTISET VOLATILE TABLE z AS(
SELECT x.RCD_ID,x.CMT,x.COL_4,y.key_word, ROW_NUMBER() OVER(PARTITION BY x.RCD_ID ORDER BY x.RCD_ID) AS RN 
FROM x JOIN y ON x.cmt LIKE '%' || y.KEY_WORD || '%' 
) 
WITH DATA PRIMARY INDEX (RCD_ID) 
ON COMMIT PRESERVE ROWS; 
--*************************************************************** 
SELECT * FROM z ORDER BY 1,5; 
--*************************************************************** 
WITH RECURSIVE RPT AS(
SELECT 
RCD_ID,FK,CMT,COL_4,RN 
FROM x 

UNION ALL 
SELECT 
b.RCD_ID,b.FK,b.CMT,b.COL_4 || ';' || a.KEY_WORD,a.RN 
FROM z AS a 
JOIN RPT AS b 
ON b.RCD_ID = a.RCD_ID 
AND b.RN = a.RN-1 
) 
SELECT * 
FROM RPT 
QUALIFY ROW_NUMBER() OVER (PARTITION BY RCD_ID ORDER BY RCD_ID, RN DESC) = 1 
ORDER BY 1,5; 
--***************************************************************