多case语句中的别名列名

Posted

技术标签:

【中文标题】多case语句中的别名列名【英文标题】:Alias Column name in mutiple case statement 【发布时间】:2014-04-11 01:20:30 【问题描述】:

我正在尝试使用 case 语句检索别名列的值。

CASE 
    WHEN FieldA = 'TestA' THEN FieldA1
    WHEN FieldB = 'TestB' THEN FieldB1
    ELSE NULL
END AS Alias1 

但是当我尝试使用这个别名来检索另一个别名的值时,我得到一个错误

CASE
    WHEN Alias1 = FieldA1 THEN FieldA0
    WHEN Alias1 = FieldB1 THEN FieldA1
    ELSE NULL
END AS Alias2 

我得到的错误信息是:

您能否提出一种消除错误的方法或任何满足我要求的替代方法

【问题讨论】:

【参考方案1】:

您不能在同一 SELECT 子句中使用列别名。你有两个选择:

使用子查询:

SELECT Alias1,
       CASE
            WHEN Alias1 = FieldA1 THEN FieldA0
            WHEN Alias1 = FieldB1 THEN FieldA1
            ELSE NULL
       END AS Alias2 
FROM (
    SELECT CASE 
                WHEN FieldA = 'TestA' THEN FieldA1
                WHEN FieldB = 'TestB' THEN FieldB1
                ELSE NULL
           END AS Alias1,
           FieldA1
           FieldB1
    ...)

或者你可以重复你在第一个CASE中使用的逻辑:

SELECT CASE 
            WHEN FieldA = 'TestA' THEN FieldA1
            WHEN FieldB = 'TestB' THEN FieldB1
            ELSE NULL
       END AS Alias1,
       CASE 
            WHEN FieldA = 'TestA' THEN FieldA0
            WHEN FieldB = 'TestB' THEN FieldB0
            ELSE NULL
       END AS Alias2

【讨论】:

感谢您的意见。我现在意识到我错过了明显的第二个解决方案:)

以上是关于多case语句中的别名列名的主要内容,如果未能解决你的问题,请参考以下文章

我可以在case语句中使用列名作为参数吗

sql 2005 case 语句 - 列名无效

在带有 LIKE 的 CASE 语句中使用 GROUP_CONCAT 列别名

Shell编程Shell中多分支case条件语句

再看case语句

CentOS shell-case语句