Как использовать Count с Case When? - PullRequest
1 голос
/ 29 апреля 2019

Я пытаюсь запросить Env между 2 датами.

Если в таблице более 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 ]

1 голос
/ 29 апреля 2019

Все ветви case должны возвращать один и тот же тип данных. Например, чтобы все ветви возвращали varchar(max):

case count(Env)
when 1 then cast(env as varchar(max))
else 'ERROR'
end
0 голосов
/ 29 апреля 2019

Надеюсь, что следующий скрипт поможет вам решить вашу проблему. Если я получу ваш фактический образец данных из таблицы «EnvTable» и «Пользователь», я смогу предоставить фактический скрипт.

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
...