簡體   English   中英

如何在CASE語句中不使用WHERE?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM