繁体   English   中英

如何在别名字段上执行功能?

[英]How do I perform a function on an alias field?

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

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的新字段,如果它是LIKE'PC%',我想在该字段上对prctr1字段执行SPLIT PART&OVERLAY函数

我试图对此做一个CASE语句,大致如下:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM