我有两个表 - tblColName和tblData
tblColNames包含我想要选择的tblData列的名称列表。
tblColNames
-----------
Var1
Var2
Var8
Var9
我只想从tblData中选择名称存在于tblColNames中的列。
是否有Teradata SQL查询来执行此操作?
答案 0 :(得分:2)
对于此任务,您必须使用动态SQL。所需的命令将在一个过程中调用,基本上如下所示(这是我曾经写过的DB2
示例,但原则应该在任何方言中都相似):
CREATE OR REPLACE PROCEDURE DYNAMIC_TABLE_ACCESS
(IN TableName VARCHAR(40), IN ColName VARCHAR(40))
DYNAMIC RESULT SETS 1
READS SQL DATA
LANGUAGE SQL
SPECIFIC DYNAMIC_TABLE_ACCESS
BEGIN
DECLARE V_DYNAMIC VARCHAR(200);
DECLARE V_SQL VARCHAR(200);
DECLARE V_CUR CURSOR WITH RETURN TO CALLER FOR V_DYNAMIC;
SET V_SQL='SELECT ' CONCAT ColName CONCAT ' AS ColName FROM ' CONCAT TableName;
PREPARE V_DYNAMIC FROM V_SQL;
OPEN V_CUR;
END
我们的想法是创建一个字符串V_SQL
,其中包含带有动态选择的列名和表名的SQL语句,然后通过PREPARE
和OPEN
游标调用命令。
因此,您会在屏幕上看到指定列和表格的条目。