SQL CASE返回两个值



我正在写我的第一个SQL CASE语句,我已经对它们做了一些研究。很明显,实际操作会和我读到的有所不同,因为背景和其他性质的东西。我知道他们是怎么工作的。我只是不能正确地形成我的。下面是我的SQL语句的草案,我试图返回两个值(无论是一个代码值从版本a和它的标题或代码值从版本B和它的标题)。有人告诉我不能在一个CASE语句中返回两个值,但是我不知道如何重写这个SQL语句来给我所需的所有值。是否有一种方法可以在CASE中使用CASE(如在每个列的CASE语句中)?

注:在粘贴代码时,我删除了别名,只是为了使它对post

更简洁。
SELECT
    CASE
        WHEN codeVersion = A THEN ACode, Title
        ELSE BCode, Title
    END
FROM Code.CodeRef
WHERE ACode=@useCode OR BCode=@useCode 

一个case语句只能返回一个值。您可以轻松地将所需内容写入:

SELECT (CASE WHEN codeVersion = 'A' THEN ACode
             ELSE BCode
        END) as Code, Title
FROM Code.CodeRef
WHERE @useCode in (ACode, BCode);

case语句只能返回单个列。在您的场景中,这就是所需的全部内容,因为title可用于结果:

SELECT
    CASE
        WHEN codeVersion = "A" THEN ACode, 
        ELSE BCode
    END as Code,
    Title
FROM Code.CodeRef
WHERE ACode=@useCode OR BCode=@useCode

如果您确实需要将大小写逻辑应用于多个列,那么您需要重复它。

我通常使用的是:

SELECT
    CASE
        WHEN codeVersion = "A" THEN 'ACode'
        WHEN codeVersion = "B" THEN 'BCode'
        ELSE 'Invalid Version'
    END as 'Version',
    Title
FROM Code.CodeRef
WHERE 
CASE
        WHEN codeVersion = "A" THEN ACode
        WHEN codeVersion = "B" THEN BCode
        ELSE 'Invalid Version'
    END = 'Acode'

我的建议使用别名。注意别名:不幸的是,你不能在where/group by子句中使用别名"Version"。你必须再次使用整个case语句。我相信您只能在Order By中使用别名。

最新更新