首页 > 解决方案 > postgresql中的动态列别名

问题描述

我正在寻找一种可以将列别名设置为动态 DDL 的方法

CREATE TABLE MATERIAL
(
ATTRIBUTE_NAME VARCHAR(20),
CURR_VAL VARCHAR(20),
NEW_VAL VARCHAR(20) );


INSERT INTO PRODUCTS VALUES ('MATERIAL DIVISION','AAAA','KKKK');

CREATE TABLE COLUMNS
(
ATTRIBUTE_NAME VARCHAR(20),
COLUMN_NAME VARCHAR(20) );


INSERT INTO COLUMNS VALUES ('MATERIAL DIVISION','ZPAA');

现在

SELECT NEW_VAL FROM MATERIAL;

会导致

NEW_VAL
________
KKKK

SELECT COLUMN_NAME FROM MATERIAL A LEFT JOIN COLUMNS B ON (A.ATTRIBUTE_NAME = B.ATTRIBUTE_NAME);

结果是

COLUMN_NAME
___________
ZPAA

我想用 ZPAA 替换 NEW_VAL。谁能帮我得到这个结果

期待结果

ZPAA
_____
KKKK

标签: sqlpostgresql

解决方案


我的解决方案是:

创建临时表材料
(
    ATTRIBUTE_NAME VARCHAR(20),
    CURR_VAL VARCHAR(20),
    NEW_VAL VARCHAR(20)
);
INSERT INTO MATERIAL VALUES ('MATERIAL DIVISION','AAAA','KKKK');
创建临时表列
(
    ATTRIBUTE_NAME VARCHAR(20),
    COLUMN_NAME VARCHAR(20)
);
插入列值('材料划分','ZPAA');

犯罪;
开始;
    SELECT retrefcur(FORMAT($query$
        SELECT NEW_VAL AS %s FROM MATERIAL A LEFT JOIN COLUMNS B ON (A.ATTRIBUTE_NAME = B.ATTRIBUTE_NAME)
    $query$,(SELECT COLUMN_NAME
                从材料 A
                    左连接列 B
                    ON (A.ATTRIBUTE_NAME = B.ATTRIBUTE_NAME))),'cur1');
    获取 cur1 中的所有内容;
犯罪;

我在 PostgreSql 10.13 中对此进行了探讨


推荐阅读