我在 select 上有一個帶有 IIF 運算式的查詢。如何在 SQL 的 where 部分過濾新生成的名為“ESTADO”的列
這是代碼:
SELECT
EM.Id
, C.Descripcion AS Clase
, T.IdClaseEM
, T.Descripcion AS Tipo
, EM.IdTipoEM
, EM.IdCentroMedico
, CM.Descripcion AS CentroMedico
, EM.FechaEvaluacion
, EM.IdEmpleado
, P.Nombres P.ApellidoPaterno P.ApellidoMaterno AS Persona
, EM.Aptitud
, IIF(EM.FechaCaducidad > GETDATE(), 'Vencido' , 'Vigente') AS Estado
, COUNT(*) OVER() TotalRecords
FROM
EvaluacionMedica AS EM
INNER JOIN TipoEM AS T ON EM.IdTipoEM = T.Id
INNER JOIN ClaseEM AS C ON T.IdClaseEM = C.Id
INNER JOIN Empleado AS E ON EM.IdEmpleado = E.Id
INNER JOIN Persona AS P ON E.IdPersona = P.Id
LEFT JOIN CentroMedico AS CM ON EM.IdCentroMedico = CM.Id
我想做這樣的事情
SELECT
EM.Id
, C.Descripcion AS Clase
, T.IdClaseEM
, T.Descripcion AS Tipo
, EM.IdTipoEM
, EM.IdCentroMedico
, CM.Descripcion AS CentroMedico
, EM.FechaEvaluacion
, EM.IdEmpleado
, P.Nombres P.ApellidoPaterno P.ApellidoMaterno AS Persona
, EM.Aptitud
, IIF(EM.FechaCaducidad > GETDATE(), 'Vencido' , 'Vigente') AS Estado
, COUNT(*) OVER() TotalRecords
FROM
EvaluacionMedica AS EM
INNER JOIN TipoEM AS T ON EM.IdTipoEM = T.Id
INNER JOIN ClaseEM AS C ON T.IdClaseEM = C.Id
INNER JOIN Empleado AS E ON EM.IdEmpleado = E.Id
INNER JOIN Persona AS P ON E.IdPersona = P.Id
LEFT JOIN CentroMedico AS CM ON EM.IdCentroMedico = CM.Id
WHERE
Estado = 'Vencido'
但顯然它會拋出并出錯,因為表上沒有 Estado 列。我可以通過在 IIF 運算式上使用新創建的列來過濾它嗎?
uj5u.com熱心網友回復:
您只需在 where 類中執行此操作:
WHERE
IIF(EM.FechaCaducidad > GETDATE(), 'Vencido' , 'Vigente')= 'Vencido'
或作為替代:
SELECT * FROM (SELECT
EM.Id
, C.Descripcion AS Clase
, T.IdClaseEM
, T.Descripcion AS Tipo
, EM.IdTipoEM
, EM.IdCentroMedico
, CM.Descripcion AS CentroMedico
, EM.FechaEvaluacion
, EM.IdEmpleado
, P.Nombres P.ApellidoPaterno P.ApellidoMaterno AS Persona
, EM.Aptitud
, IIF(EM.FechaCaducidad > GETDATE(), 'Vencido' , 'Vigente') AS Estado
, COUNT(*) OVER() TotalRecords
FROM
EvaluacionMedica AS EM
INNER JOIN TipoEM AS T ON EM.IdTipoEM = T.Id
INNER JOIN ClaseEM AS C ON T.IdClaseEM = C.Id
INNER JOIN Empleado AS E ON EM.IdEmpleado = E.Id
INNER JOIN Persona AS P ON E.IdPersona = P.Id
LEFT JOIN CentroMedico AS CM ON EM.IdCentroMedico = CM.Id) t WHERE Estado = 'Vencido'
最后一個選項,您嵌入主查詢,然后您可以過濾名為 Estado 的列。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/353187.html
