返回两个值的SQL CASE

返回两个值的SQL CASE,sql,case,Sql,Case,我正在编写我的第一个SQL CASE语句,并对它们进行了一些研究。很明显,实际的练习会和我读到的有所不同,因为上下文和这种性质的东西。我了解它们是如何工作的。我只是有麻烦形成我的正确。下面是我的SQL语句草稿,其中我尝试返回两个值(来自版本a及其标题的代码值或来自版本B及其标题的代码值)。我被告知不能在一个实例statation中返回两个值,但我不知道如何重写此SQL语句以提供我需要的所有值。是否有一种在案例中使用案例的方法(如在每列的案例语句中) 另外,在粘贴代码时,我去掉了别名,只是为了让文

我正在编写我的第一个SQL CASE语句,并对它们进行了一些研究。很明显,实际的练习会和我读到的有所不同,因为上下文和这种性质的东西。我了解它们是如何工作的。我只是有麻烦形成我的正确。下面是我的SQL语句草稿,其中我尝试返回两个值(来自版本a及其标题的代码值或来自版本B及其标题的代码值)。我被告知不能在一个实例statation中返回两个值,但我不知道如何重写此SQL语句以提供我需要的所有值。是否有一种在案例中使用案例的方法(如在每列的案例语句中)

另外,在粘贴代码时,我去掉了别名,只是为了让文章更简洁

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
语句只能返回一个值。您可以轻松地将所需内容写成:

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

case
语句只能返回一列。在您的场景中,这就是所需的全部内容,因为标题用于两种结果:

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

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

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

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

以下是我通常使用的别名:

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

根据Acode和Bcode,标题有什么不同?是一样的,对吧?是的。我只是觉得我需要把它添加到两者中,因为案例陈述是这样做的。我从建议中注意到情况并非如此。根据Acode和Bcode,标题有何不同?是一样的,对吧?是的。我只是觉得我需要把它添加到两者中,因为案例陈述是这样做的。我从建议中注意到情况并非如此。你能解释一下在
中使用
与在
WHERE
子句中使用
的区别吗?@AtlasBowler:
x in(a,b,c)
x=a或x=b或x=c
的缩写。你能解释一下
in
WHERE
子句中的区别吗?@AtlasBowler:
x in(a,b,c)
x=a或x=b或x=c的缩写。