喜欢这个
SELECT *
FROM UsersMedicalSurgicalHistory UMSH INNER JOIN CCDTransaction CT on
UMSH.SurgicalHistoryId = CT.RowId
WHERE (
(CASE
WHEN LEN(UMSH.DateOfProcedure)<=4 THEN UMSH.DateOfProcedure
WHEN LEN(UMSH.DateOfProcedure)=0 THEN UMSH.DateOfProcedure
END
=
CASE WHEN @CodeFilter3 IS not null THEN @CodeFilter3
ELSE UMSH.DateOfProcedure end)
OR
(CASE
WHEN LEN(UMSH.DateOfProcedure)>4 THEN
CONVERT(datetime,UMSH.DateOfProcedure,101)
ELSE GETDATE()
END
=
CASE WHEN @CodeFilter2 IS not null THEN @CodeFilter2
ELSE GETDATE()
END)
)
所以问题就像CASE表达式可以在WHERE子句的两边使用
答案 0 :(得分:1)
根据您的查询,上面写着......
CASES 可以最小化为嵌套条件,
SELECT * FROM UsersMedicalSurgicalHistory UMSH
INNER JOIN CCDTransaction CT on UMSH.SurgicalHistoryId = CT.RowId
WHERE (
(UMSH.DateOfProcedure = @CodeFilter3 and @CodeFilter3 IS not null)
OR
@CodeFilter3 IS null
)
OR
(
(
(LEN(UMSH.DateOfProcedure)>4 AND CONVERT(datetime,UMSH.DateOfProcedure,101)=@CodeFilter2)
OR
(LEN(UMSH.DateOfProcedure)<=4 AND GETDATE() =@CodeFilter2)
AND @CodeFilter2 IS NOT NULL
)
OR
(LEN(UMSH.DateOfProcedure)<=4 AND @CodeFilter2 IS null)
)
尝试此查询...希望它提供所需的输出:)