Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何在别名字段上执行函数?_Sql_Postgresql_Case_Alias_Coalesce - Fatal编程技术网

Sql 如何在别名字段上执行函数?

Sql 如何在别名字段上执行函数?,sql,postgresql,case,alias,coalesce,Sql,Postgresql,Case,Alias,Coalesce,我在PostgreSQL中有一个视图,其中我使用COALESCE函数从表中提取第一个NOTNULL字段。i、 e SELECT SRC.SAP_SETNODE.SUBSET_CLS, COALESCE( SETNODE_13.SUBSET_NAME, SETNODE_12.SUBSET_NAME, SETNODE_11.SUBSET_NAME, SETNODE_10.SUBSET_NAME, SETNODE_9.SUBSET_NAME, SET

我在PostgreSQL中有一个视图,其中我使用COALESCE函数从表中提取第一个NOTNULL字段。i、 e

SELECT 
SRC.SAP_SETNODE.SUBSET_CLS,

COALESCE(
    SETNODE_13.SUBSET_NAME,
    SETNODE_12.SUBSET_NAME,
    SETNODE_11.SUBSET_NAME,
    SETNODE_10.SUBSET_NAME,
    SETNODE_9.SUBSET_NAME,
    SETNODE_8.SUBSET_NAME,
    SETNODE_7.SUBSET_NAME,
    SETNODE_6.SUBSET_NAME,
    SETNODE_5.SUBSET_NAME,
    SETNODE_4.SUBSET_NAME,
    SETNODE_3.SUBSET_NAME,
    SETNODE_2.SUBSET_NAME,
    SETNODE_1.SUBSET_NAME,
    SRC.SAP_SETNODE.SUBSET_NAME,
    SRC.SAP_SETNODE.SET_NAME)
AS prctr1, 
有了这个字段后,我想创建一个名为prctr2的新字段,如果prctr1字段类似于“PC%”,我想在该字段上执行拆分部分和覆盖功能

我试图就这一点做一个案例陈述,大致如下:

WHEN prctr1 LIKE 'PC%' THEN split_part( overlay(prctr1 placing '00000' from 1 for 2 ),'.',1)
ELSE prctr1

但我收到一条消息说prctr1列不存在。有什么方法可以实现这一点吗?

只需将主查询封装在外部查询中,然后执行CASE语句,如下所示:

   SELECT CASE WHEN prctr1 LIKE 'PC%' THEN split_part( overlay(prctr1 placing '00000' from 1 for 2 ),'.',1)
ELSE prctr1 end as pctrl1 
FROM (
SELECT 
SRC.SAP_SETNODE.SUBSET_CLS,

COALESCE(
    SETNODE_13.SUBSET_NAME,
    SETNODE_12.SUBSET_NAME,
    SETNODE_11.SUBSET_NAME,
    SETNODE_10.SUBSET_NAME,
    SETNODE_9.SUBSET_NAME,
    SETNODE_8.SUBSET_NAME,
    SETNODE_7.SUBSET_NAME,
    SETNODE_6.SUBSET_NAME,
    SETNODE_5.SUBSET_NAME,
    SETNODE_4.SUBSET_NAME,
    SETNODE_3.SUBSET_NAME,
    SETNODE_2.SUBSET_NAME,
    SETNODE_1.SUBSET_NAME,
    SRC.SAP_SETNODE.SUBSET_NAME,
    SRC.SAP_SETNODE.SET_NAME)
AS prctr1
) as foo