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