en SQL Server, debe seleccionar una de las dos columnas, puede hacer esto una declaración de caso?

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

Pregunta

Mi tabla:

Los usuarios (identificación de usuario, col1, col2)

Quiero hacer un procedimiento almacenado genérico, pero necesito volver SEA col1 col2 o en una consulta.

¿Puedo declaración de caso manejar esta situación?

ID de usuario SELECT, col1 De los usuarios

o

ID de usuario SELECT, col2 De los usuarios

¿Fue útil?

Solución

Usar CASE:

SELECT t.userid,
       CASE
         WHEN [something to evaluate why to show col1 vs col2 ] THEN
           t.col1
         ELSE
           t.col2
       END
  FROM USERS t

El uso de COALESCE:

SELECT t.userid,
       COALESCE(t.col1, t.col2)
  FROM USERS t

COALESCE devuelve el primer valor de la columna que no es nulo, comenzando desde la izquierda.

Otros consejos

Sí, siempre y cuando no te importa la devolución de los mismos nombres de columna:

SELECT userID, ArbitraryCol = CASE WHEN @param = 1 then col1 ELSE col2 END
FROM Users

Si necesita los encabezados de columna para cambiar, entonces debería usar la instrucción IF

IF @param = 1
BEGIN
SELECT userID, col1 FROM Users
END
ELSE
BEGIN
SELECT userID, col2 FROM Users
END

Creo SQL Server 2000/2005 es algo como esto.

select
   UserID,
   case UserID
      when 1 then Col1
      when 2 then Col2
      else 'boo'
   end as SpecialSituation
from
   Users

Puede, suponiendo que tiene una expresión lógica para cuándo debe regresar col1 col2 en lugar de:

SELECT USERID CASE WHEN USERTYPE='X' THEN COL1 ELSE COL2 END FROM USERS

Si col1 y col2 son de diferentes tipos, tendrá que utilizar-CAST o CONVERT para convertir una a la otra.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top