我正在写我的第一个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中使用别名。