No SQLServer, precisa selecionar uma das duas colunas, uma declaração de caso pode fazer isso?

StackOverflow https://stackoverflow.com/questions/1691690

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

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top