tsql - for - ¿Cómo uso el Caso/Cuándo de T-SQL?
sintaxis select sql (3)
Tengo una gran consulta que usa mayúsculas y minúsculas cuando a menudo. Ahora tengo este SQL aquí, que no funciona.
(select case when xyz.something = 1
then
''SOMETEXT''
else
(select case when xyz.somethingelse = 1)
then
''SOMEOTHERTEXT''
end)
(select case when xyz.somethingelseagain = 2)
then
''SOMEOTHERTEXTGOESHERE''
end)
end) [ColumnName],
Lo que causa problemas es xyz.somethingelseagain = 2
, dice que no podría unir esa expresión. xyz es un alias para una tabla que se une más abajo en la consulta. ¿Qué pasa aquí? Eliminar uno de los 2 casos / whens corrige eso, pero los necesito a ambos, probablemente aún más casos.
Tan pronto como una declaración WHEN es verdadera, la ruptura es implícita.
Tendrá que considerar qué expresión de WHEN es más probable que suceda. Si coloca eso CUANDO al final de una larga lista de instrucciones WHEN, su sql es probable que sea más lento. Así que colócalo como el primero.
Más información aquí: break in case statement en T-SQL
SELECT
CASE
WHEN xyz.something = 1 THEN ''SOMETEXT''
WHEN xyz.somethingelse = 1 THEN ''SOMEOTHERTEXT''
WHEN xyz.somethingelseagain = 2 THEN ''SOMEOTHERTEXTGOESHERE''
ELSE ''SOMETHING UNKNOWN''
END AS ColumnName;
declare @n int = 7,
@m int = 3;
select
case
when @n = 1 then
''SOMETEXT''
else
case
when @m = 1 then
''SOMEOTHERTEXT''
when @m = 2 then
''SOMEOTHERTEXTGOESHERE''
end
end as col1
-- n=1 => returns SOMETEXT regardless of @m
-- n=2 and m=1 => returns SOMEOTHERTEXT
-- n=2 and m=2 => returns SOMEOTHERTEXTGOESHERE
-- n=2 and m>2 => returns null (no else defined for inner case)