No SQLServer, precisa selecionar uma das duas colunas, uma declaração de caso pode fazer isso?
-
18-09-2019 - |
Pergunta
Minha mesa:
Usuários (UserID, col1, col2)
Quero fazer um procedimento armazenado genérico, mas preciso devolver col1 ou col2 em uma consulta.
Posso lidar com a instrução CASE lidar com essa situação?
Selecione UserID, col1 dos usuários
OU
Selecione UserID, col2 dos usuários
Solução
Usando caso:
SELECT t.userid,
CASE
WHEN [something to evaluate why to show col1 vs col2 ] THEN
t.col1
ELSE
t.col2
END
FROM USERS t
Usando Coalesce:
SELECT t.userid,
COALESCE(t.col1, t.col2)
FROM USERS t
Coalesce retorna o primeiro valor da coluna que não é nulo, a partir da esquerda.
Outras dicas
Sim, desde que você não se importe de retornar os mesmos nomes de colunas:
SELECT userID, ArbitraryCol = CASE WHEN @param = 1 then col1 ELSE col2 END
FROM Users
Se você precisar dos cabeçalhos da coluna para mudar, você deve usar a instrução IF
IF @param = 1
BEGIN
SELECT userID, col1 FROM Users
END
ELSE
BEGIN
SELECT userID, col2 FROM Users
END
Eu acho que o SQL Server 2000/2005 é algo assim.
select
UserID,
case UserID
when 1 then Col1
when 2 then Col2
else 'boo'
end as SpecialSituation
from
Users
Ele pode, supondo que você tenha uma expressão lógica para quando retornar col1 em vez de col2:
SELECT USERID CASE WHEN USERTYPE='X' THEN COL1 ELSE COL2 END FROM USERS
Se Col1 e Col2 forem de diferentes tipos, você precisará usar o elenco ou converter para converter um para o outro.