en SQL Server, debe seleccionar una de las dos columnas, puede hacer esto una declaración de caso?
-
18-09-2019 - |
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
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.