我在存储过程中遇到了复杂的SQL switch case语句。
我正在复制存储过程的中间部分:
AND
(
@Statuses IS NULL
OR
[BF].[BookingFileStatusID] IN
(
SELECT [ID]
FROM @BookingFileStatuses)
AND
(
@Statuses IS NULL
OR
**((
(
SELECT count([ID])
FROM @BookingFileStatuses) >= 1)
AND
(
1 = (
CASE
WHEN [S].servicetypeid IS NULL THEN 1
WHEN (
[S].servicetypeid <> 3
AND
[BF].bookingfilestatusid IN ( 16, 17, 18, 19, 20, 23)
)
THEN 1
WHEN (
[S].servicetypeid = 3
AND
[BF].bookingfilestatusid IN
(
SELECT [ID]
FROM @BookingStatuses)
)
THEN 1
ELSE 0
END)
)
)**
)
)
突出显示的部分应返回一些结果。
即。用if else替换突出显示的部分。
请协助。
答案 0 :(得分:0)
你可以在没有case语句的情况下重写整个事情。这种方式更容易阅读。
(
(SELECT Count([ID]) FROM @BookingFileStatuses) >= 1
AND
( [S].ServiceTypeID IS NULL
OR ([S].ServiceTypeID <> 3 AND [BF].BookingFileStatusID in (16,17,18,19,20,23))
OR ([S].ServiceTypeID = 3 AND [BF].BookingFileStatusID in (SELECT [ID] FROM @BookingStatuses))
)
)
答案 1 :(得分:0)
在这部分:
AND ( @Statuses IS NULL
OR
1 = (CASE WHEN @BookingStatusCount = 0 THEN 1
ELSE
xxxxxxxxxxxxxxxx
END)
)
你正在制作或有两种情况:1 =(1或其他)。所以你根本不需要第二个查询。因为你总能创造一个价值。我想写一下:
AND ( @Statuses IS NULL
OR
1 = (CASE WHEN @BookingStatusCount = 0 THEN 1 else 5)
)