[英]How to not use WHERE in a CASE statement?
SELECT
c.ClaimId, c.Number, s.ClaimStatusId StatusId, c.ClaimedAmount,
c.Created AS Lodged, c.Updated,
(u.UserName + '' + u.LastName) AS Creditor,
c.JobId, j.CompanyName AS JobName,
outcome.Approved AS ApprovedAmount, outcome.Rejected AS RejectedAmount,
s.NormalizedName AS Status, type.Name AS Type, c.Version, c.RemarksCount
FROM
ClaimView c
INNER JOIN
ClaimType type ON c.TypeId = type.ClaimTypeId
LEFT JOIN
ClaimOutcome outcome ON outcome.ClaimId = c.ClaimId
INNER JOIN
Job j ON c.JobId = j.JobId
INNER JOIN
ApplicationUser u ON u.Id = c.CreatedBy
INNER JOIN
ClaimStatus s ON s.ClaimStatusId = c.StatusId
WHERE
c.CreatedBy = @userId
AND c.StatusId > 1
AND c.IsDeleted = (CASE @isAdmin
WHEN 'False' THEN 0
END)
有@isAdmin
變量,我需要使用@isAdmin IN(1,0)返回日期,或者根本不使用WHERE c.IsDeleted,如果@isAdmin
為True。 我該如何實施? 那是我上面的當前代碼。
AND c.isDeleted = CASE WHEN @isAdmin = 'False' THEN 0 ELSE c.isDeleted END
您可以使用簡單的OR
@isAdmin
不是false
的事實(或者您可以/應該對照@isAdmin='true'
) c.isDeleted = 0
但是您並不需要兩個條件都成立。
...
WHERE
c.CreatedBy = @userId
AND c.StatusId > 1
AND (@isAdmin != 'False' OR c.IsDeleted = 0 )
這應該做。 可能有些大材小用,但我認為使用NULL處理在技術上也更合理:
(
AND (
@isAdmin = 'False'
AND c.IsDeleted = 0
)
OR
(@isAdmin <> 'False'
AND c.isDeleted IS NULL
)
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.