Teradata 在“注释”字段中找到具有关键字的列

Teradata 在“注释”字段中找到具有关键字的列,teradata,Teradata,在工作中,有人告诉我一项任务“简单而直接”,但我在以下方面遇到了困难: 我有一个包含4列的视图,一个PK、FK、comments和第4列。我的经理告诉我创建一个包含75个左右关键字的表,然后创建一个查询,该查询将遍历视图中的每一行,将注释与关键字表进行比较,然后将找到的每个关键字追加到第4列。我搜索过谷歌等等,但没有找到一个可以这样做的查询。如有任何帮助,将不胜感激。请尝试下面的内容。我是Teradata的新手 --****************************************

在工作中,有人告诉我一项任务“简单而直接”,但我在以下方面遇到了困难:


我有一个包含4列的视图,一个PK、FK、comments和第4列。我的经理告诉我创建一个包含75个左右关键字的表,然后创建一个查询,该查询将遍历视图中的每一行,将注释与关键字表进行比较,然后将找到的每个关键字追加到第4列。我搜索过谷歌等等,但没有找到一个可以这样做的查询。如有任何帮助,将不胜感激。

请尝试下面的内容。我是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;
--***************************************************************