如何使用Count with Case When?

时间:2019-04-29 16:21:36

标签: sql-server count case case-when

我正在尝试查询以在2个日期之间获取Env。

如果表中的值大于1:显示错误,否则显示Env的值。

我不确定我的查询是否正确。

SELECT ENV,
Case count(Env)
when 1 then Env
else 'ERROR'

From EnvTable
Inner JOIN USER ON USR_ID=Env_Usr_ID
where Usr_login='ELLA' and Env_Date between 201601 and 201612
Group by Env

我期望Env,但是实际结果是消息错误: 将数据类型varchar转换为数字时出错

2 个答案:

答案 0 :(得分:1)

case的所有分支必须返回相同的数据类型。例如,要使所有分支都返回varchar(max)

case count(Env)
when 1 then cast(env as varchar(max))
else 'ERROR'
end

答案 1 :(得分:0)

希望以下脚本提示将帮助您解决问题。如果我从“ EnvTable”和“ User”表中获得了您的实际数据样本,则可以提供实际脚本。

SELECT 
E.ENV,
CASE COUNT(E.Env)
    WHEN 1 THEN CAST(E.Env AS VARCHAR(50))
    ELSE 'ERROR'
END AS ENV_COUNT
FROM EnvTable E
INNER JOIN [USER] U 
    ON U.USR_ID=E.Env_Usr_ID
WHERE U.Usr_login='ELLA' 
AND E.Env_Date BETWEEN '201601' AND '201612'
GROUP BY E.Env