如何 select 在 SAP HANA 中不为空的列?
How to select columns which are not null in SAP HANA?
所以我有一个基础 table - TRAINING
,它有 100 列。有些列将完全为 NULL,有些将包含值。所以说 COLUMN 1-20
是 null 而 COLUMN 21-100
不是 NULL。
我有另一个 table 叫 - CONFIGURATION
。它只有一列 VARCHAR
类型。此 table 包含 TRAINING table 中不是 NULL
的那些列的名称。所以它将包含值 - COLUMN 21-100
.
我想做的是- 只获取非NULL 的那些列的数据。所以我希望输出作为 table COLUMN 21-100
中包含的数据点。这个数字每次都可能不同,也可以交错,比如 COLUMN 1-10
是 NULL,COLUMN 11-25
不是 NULL
,剩下的又是 NULL。
我正在考虑实施内部联接,但我没有它所需的 table 结构。
请提供一些提示。
谢谢。
您需要为此创建动态 SQL。
第一步 - 创建VARCHAR(5000)
数据类型的ALL_COLUMNS
变量。
来自您要查询的 CONFIGURATION
table select 列名称。然后使用 STRING_AGG
函数将它们聚合成单个值(在我的示例中 COL1
是来自 CONFIGURATION
table 的列)。将输出分配给 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
所以我有一个基础 table - TRAINING
,它有 100 列。有些列将完全为 NULL,有些将包含值。所以说 COLUMN 1-20
是 null 而 COLUMN 21-100
不是 NULL。
我有另一个 table 叫 - CONFIGURATION
。它只有一列 VARCHAR
类型。此 table 包含 TRAINING table 中不是 NULL
的那些列的名称。所以它将包含值 - COLUMN 21-100
.
我想做的是- 只获取非NULL 的那些列的数据。所以我希望输出作为 table COLUMN 21-100
中包含的数据点。这个数字每次都可能不同,也可以交错,比如 COLUMN 1-10
是 NULL,COLUMN 11-25
不是 NULL
,剩下的又是 NULL。
我正在考虑实施内部联接,但我没有它所需的 table 结构。
请提供一些提示。
谢谢。
您需要为此创建动态 SQL。
第一步 - 创建VARCHAR(5000)
数据类型的ALL_COLUMNS
变量。
来自您要查询的 CONFIGURATION
table select 列名称。然后使用 STRING_AGG
函数将它们聚合成单个值(在我的示例中 COL1
是来自 CONFIGURATION
table 的列)。将输出分配给 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