簡體   English   中英

SQL Server - where 子句的案例

[英]SQL Server - CASE on where clause

我正在研究一個選擇查詢的存儲過程。 WHERE子句下,我過濾返回結果以僅在存在PageTitle= 'STA'

這是我的查詢示例:

@InputCountryId INT, 
@InputIndustryId INT


AS 
BEGIN

SELECT 
      r.IdCountry,
      r.IdIndustry,
      r.PageTitle, 
      r.IndustryName

From dbo.Reports r

WHERE 
     r.IdCountry = @InputCountryId
     r.IdIndustry = @InputIndustryId
     r.PageTitle = 'STA'
END

結束條件r.PageTitle我希望它僅在InputCountry = 1時應用; 不包括過濾器。

我已經通過包含CASE嘗試了這一點。 每當我嘗試介紹這種情況時,都會遇到語法錯誤。 這是可能的嗎? 我是否錯誤地實施了它?

這是包含CASE的存儲過程的示例。

    @InputCountryId INT, 
    @InputIndustryId INT
    
    
    AS 
    BEGIN
    
    SELECT 
          r.IdCountry,
          r.IdIndustry,
          r.PageTitle, 
          r.IndustryName
    
    From dbo.Reports r
    
    WHERE 
         r.IdCountry = @InputCountryId
         r.IdIndustry = @InputIndustryId
CASE WHEN @InputCountryId = 1 THEN
         r.PageTitle = 'STA'
END



    END

試試這個方法:

WHERE 
     r.IdCountry = @InputCountryId and
     r.IdIndustry = @InputIndustryId and
     (@InputCountryId <> 1 or r.PageTitle = 'STA')

你不需要case語句。 您可以使用OR子句

 WHERE 
     r.IdCountry = @InputCountryId
     r.IdIndustry = @InputIndustryId
     (@InputCountryId != 1 OR r.PageTitle = 'STA')

這僅在 InputCountry 為 1 時使用 STA 過濾 PageTitle

我無法用您的數據進行測試,但這里有一個 WHERE 子句中的 CASE 有效。

DECLARE @Variable INT = 3

SELECT GETDATE()
WHERE 1 =
  CASE
    WHEN @Variable = 1 THEN 1
    WHEN @Variable = 3 THEN 1
    WHEN @Variable = 5 THEN 1
    ELSE 0
  END

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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