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