【问题标题】:How to select columns which are not null in SAP HANA?如何在 SAP HANA 中选择不为空的列?
【发布时间】:2018-10-08 10:59:40
【问题描述】:

所以我有一个基表 - TRAINING,它有 100 列。一些列将完全为 NULL,而一些列将包含值。所以说COLUMN 1-20 为空,COLUMN 21-100 不为空。

我有另一个名为 - CONFIGURATION 的表。它只有一列VARCHAR。此表包含 TRAINING 表中那些不是 NULL 的列的名称。所以它将包含值 - COLUMN 21-100

我想要做的是 - 只获取那些不为 NULL 的列的数据。所以我希望输出为表COLUMN 21-100 中包含的数据点。这个数字可能每次都不一样,也可以交错,比如COLUMN 1-10是NULL,COLUMN 11-25不是NULL,剩下的又是NULL。

我正在考虑实现内部联接,但我没有所需的表结构。

请提供一些提示。

谢谢。

【问题讨论】:

  • 您需要为此使用动态 SQL。
  • 你能举个例子吗?

标签: mysql sql database sap hana


【解决方案1】:

您需要为此创建动态 SQL。

第一步 - 创建VARCHAR(5000) 数据类型的ALL_COLUMNS 变量。 从您的CONFIGURATION 表中选择您要查询的列名。然后使用STRING_AGG 函数将它们聚合为单个值(在我的示例中,COL1 是来自CONFIGURATION 表的列)。将输出分配给ALL_COLUMNS 变量

第二步使用EXECUTE IMMEDIATE运行动态SQL。添加 ALL_COLUMNS 变量作为该查询的输入。

这里是示例代码:

DO
BEGIN

/* First Step - create string with all column names separated by comma*/

    DECLARE ALL_COLUMNS VARCHAR(5000);

    SELECT  STRING_AGG(COL1,',' ORDER BY COL1)  INTO ALL_COLUMNS FROM CONFIGURATION;

/*Second Step - create dynamic SQL including variable from First Step*/

    EXECUTE IMMEDIATE ('SELECT ' || :ALL_COLUMNS  || ' FROM "TRAINING" ');

END

【讨论】:

  • 非常感谢。这是完美的解决方案。只是一个后续问题 - 为什么我们真的需要动态 sql?我们不能像往常一样在选择查询中使用ALL_COLUMNS 变量来获取结果吗?我尝试了以下查询,但它不起作用。你能解释一下为什么吗? SELECT :columns from "ATTRIBUTE_TABLE";
  • 这是因为:columns 变量是一个字符串,SQL 引擎会将其视为固定值,即:对于字符串 'col1,col2,col3',它只会显示一列具有相乘值每行中的 col1,col2,col3。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-04
  • 2017-05-27
  • 2017-05-26
  • 1970-01-01
  • 2019-04-15
相关资源
最近更新 更多