如何在SQL Query中使用CASE子句两次

DBO*_*BOn 1 sql t-sql sql-server

我试图在一个SQL查询中应用两个条件.

(select DISTINCT (
        CASE WHEN (
         ABC.GemUserID = '99' ) 
         OR ABC.GemUserID != '99'
            THEN 'Yes'
    ELSE 'No'
        END)) AS AllWell
Run Code Online (Sandbox Code Playgroud)

这使我的输出为"是",因为CASE仅适用于下面的1个文件:

目前的结果:

99 , Yes
99 , Yes
99 , Yes
Run Code Online (Sandbox Code Playgroud)

预期结果:

99 , No
99 , No
99 , Yes
Run Code Online (Sandbox Code Playgroud)

我使用以下查询,但SQL查询Intellisence将其识别为错误.

查询错误:

(select DISTINCT (
    CASE WHEN ( ABC.GEMUserID  = '99' THEN 'Yes' else 'No'
    CASE WHEN ( ABC.GEMUserID != '99' THEN 'No'  else 'Yes'

    END)) AS AllWell
Run Code Online (Sandbox Code Playgroud)

修复上述错误查询后:

(select DISTINCT 
        (CASE WHEN  ABC.GemUserID  = '99' THEN 'Yes' else 'No' END), 
        (CASE WHEN  ABC.GemUserID != '99' THEN 'No'  else 'Yes' END))
         AS AllWell
Run Code Online (Sandbox Code Playgroud)

但我收到错误:

消息116,级别16,状态1,行17当子查询未与EXISTS一起引入时,只能在选择列表中指定一个表达式.

如何解决这个问题?

Gor*_*off 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
Run Code Online (Sandbox Code Playgroud)

你打算给第一列命名吗?