【问题标题】:Is there a query to select a column whose name is stored in another table?是否有查询来选择名称存储在另一个表中的列?
【发布时间】:2014-12-15 05:14:40
【问题描述】:

我有两个表 - tblColName 和 tblData

tblColNames 包含我要选择的 tblData 列的名称列表。

tblColNames
-----------
Var1
Var2
Var8
Var9

我只想从 tblData 中选择名称出现在 tblColNames 中的列。

是否有执行此操作的 Teradata SQL 查询?

【问题讨论】:

  • 这是一个基本的JOINWHERE myColumnWithName IN (SELECT ...) 查询。你试过了吗?
  • @PanagiotisKanavos 我读它的意思是SELECT var1, var2, var8, var9 from tblData,其中列表 var1-9 是动态生成的,这不是 JOINWHERE AFAICS。
  • @Rup 是的,这就是我的意思。不是 JOIN。

标签: sql select teradata


【解决方案1】:

对于此任务,您必须使用动态 SQL。所需的命令将在一个过程中被调用,基本上如下所示(这是我曾经写过的DB2example,但任何方言中的原理都应该相似):

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语句,然后通过PREPAREOPEN游标命令调用。

因此,您会在屏幕上看到指定列和表的条目。

【讨论】:

    猜你喜欢
    • 2017-11-22
    • 2012-08-18
    • 2015-02-05
    • 2023-03-24
    • 1970-01-01
    • 2021-10-04
    • 2012-04-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多