我正在尝试在一个SQL查询中应用两个条件。
(select DISTINCT (
CASE WHEN (
ABC.GemUserID = '99' )
OR ABC.GemUserID != '99'
THEN 'Yes'
ELSE 'No'
END)) AS AllWell
这使我的输出为“是”,因为CASE仅适用于下面的1个文件:
当前结果:
99 , Yes
99 , Yes
99 , Yes
预期结果:
99 , No
99 , No
99 , Yes
我正在使用以下查询,但SQL Query Intellisence将其识别为错误。
错误的查询:
(select DISTINCT (
CASE WHEN ( ABC.GEMUserID = '99' THEN 'Yes' else 'No'
CASE WHEN ( ABC.GEMUserID != '99' THEN 'No' else 'Yes'
END)) AS AllWell
修复上述错误查询后:
(select DISTINCT
(CASE WHEN ABC.GemUserID = '99' THEN 'Yes' else 'No' END),
(CASE WHEN ABC.GemUserID != '99' THEN 'No' else 'Yes' END))
AS AllWell
但我收到错误:
Msg 116,Level 16,State 1,Line 17只有一个表达式 在未引入子查询时在选择列表中指定 存在。
如何解决这个问题?
答案 0 :(得分:5)
select distinct
- 本身 - 是SQL语法的一部分。 distinct
不是函数。不应该用括号括起来。所以,如果我理解你的问题:
select DISTINCT
( CASE WHEN ABC.GEMUserID = '99' THEN 'Yes' else 'No' END),
( CASE WHEN ABC.GEMUserID <> '99' THEN 'No' else 'Yes' END) as AllWell
您打算给第一列命名吗?
答案 1 :(得分:2)
select DISTINCT
CASE WHEN ABC.GEMUserID = '99' THEN 'Yes'
ELSE 'No' -- This is automatically When ABC.GEMUserID <> '99'
END AS AllWell
答案 2 :(得分:0)
根据错误,您的查询是一个更大的SQL命令中的子查询(可能在IN后面?)。因此,这样的子查询to return more than one column是不可能的。
答案 3 :(得分:0)
所以你的第一个问题,你已经说过:
CASE WHEN userID = 99 OR userID != 99
换句话说:
CASE WHEN 1=1
这就是为什么它为所有内容返回yes(不确定当前和预期结果之间的差异应该考虑到所有行的userID都是99)。
对于您的错误查询,似乎您在另一个选择的中间返回该选择(因为您在结尾处将其别名)。因此,您不能在嵌套选择中返回多个列。您不需要第二个CASE语句,只需将查询更改为:
(select DISTINCT
CASE WHEN ABC.GemUserID = '99' THEN 'Yes' Else 'No' End) AS AllWell
假设您将缺少的部分保留在查询中,例如FROM。