SQL CASE返回两个值

时间:2014-08-07 16:56:48

标签: sql case

我正在编写我的第一个SQL CASE语句,并且我已经对它们进行了一些研究。显然,由于背景和那种性质的事物,实际的做法将与我读到的有点不同。我明白他们是如何工作的。我正好无法正确地形成我的。下面是我的SQL语句草案,其中我试图返回两个值(来自版本A的代码值及其标题或来自版本B及其标题的代码值)。我被告知你不能在一个CASE语句中返回两个值,但我无法弄清楚如何重写这个SQL语句来给我所需的所有值。有没有办法在CASE中使用CASE(如每列的CASE语句)?

P.S。粘贴代码时,我删除了别名只是为了使帖子更简洁

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

3 个答案:

答案 0 :(得分:5)

case语句只能返回一个值。您可以轻松地编写您想要的内容:

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

答案 1 :(得分:0)

case语句只能返回一列。在您的场景中,只需要使用标题:

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

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

答案 2 :(得分:0)

以下是我通常使用的内容:

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子句中。您必须再次使用整个案例语句。我相信你只能在Order By中使用别名。