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