w3schools - SQL Server-Declaración de caso
select case sql ejemplos (4)
Estoy buscando una manera de crear una selección sin repetir la consulta condicional.
Supongo que no quieres repetir Foo-stuff+bar
. Podrías poner tu cálculo en una tabla derivada:
SELECT CASE WHEN a.TestValue > 2 THEN a.TestValue ELSE ''Fail'' END
FROM (SELECT (Foo-stuff+bar) AS TestValue FROM MyTable) AS a
Una expresión de tabla común funcionaría igual de bien:
WITH a AS (SELECT (Foo-stuff+bar) AS TestValue FROM MyTable)
SELECT CASE WHEN a.TestValue > 2 THEN a.TestValue ELSE ''Fail'' END
FROM a
Además, cada parte de su conmutador debe devolver el mismo tipo de datos, por lo que es posible que tenga que emitir uno o más casos.
Estoy casi seguro de que no puede hacer esto dentro del contexto de la declaración del caso, y no he podido encontrar ninguna documentación al respecto, pero es posible hacer lo siguiente:
SELECT CASE WHEN testValue > 2
THEN testValue(Without Repeating it) ELSE FailValue)
END
FROM Table
Un mejor ejemplo más completo:
Select CASE WHEN (Foo-stuff+bar) > 2
THEN Conditional statement without >2 Else "Fail"
END
FROM TABLE
Estoy buscando una manera de crear una selección sin repetir la consulta condicional.
EDIT: debido a un mal ejemplo de mi parte, y la falta de respuestas que estaba buscando:
testValue = (Table.A / Table.B) * Table.C Table.D
SELECT CASE WHEN testValue > 2
THEN testValue ELSE FailValue)
END
FROM Table
Al igual que
DECLARE @t INT=1
SELECT CASE
WHEN @t>0 THEN
CASE
WHEN @t=1 THEN ''one''
ELSE ''not one''
END
ELSE ''less than one''
END
EDITAR: Después de analizar más la pregunta, creo que la mejor opción es crear una función que calcule el valor. De esa manera, si terminas teniendo varios lugares donde se realizan los cálculos, solo tienes un punto para mantener la lógica.
La consulta se puede escribir un poco más simple, así:
DECLARE @T INT = 2
SELECT CASE
WHEN @T < 1 THEN ''less than one''
WHEN @T = 1 THEN ''one''
ELSE ''greater than one''
END T
Podemos usar declaración de caso como esta
select Name,EmailId,gender=case
when gender=''M'' then ''F''
when gender=''F'' then ''M''
end
from [dbo].[Employees]
También podemos hacerlo como sigue.
select Name,EmailId,case gender
when ''M'' then ''F''
when ''F'' then ''M''
end
from [dbo].[Employees]