[英]sql case in where clause
我在SSRS中有一份報告,其中一個參數是基於某人是否參加面試,未參加或當前沒有反饋。
SQL如下:
SELECT
(C.Forename + ' ' + C.Surname) as Fullname,
C.NINO,
S.SignpostingType, ST.StakeholderDesc, S.SignpostDate,
(CASE WHEN S.Attended = 0 THEN 'False' ELSE 'True' END) AS Attended,
(CASE WHEN S.FailedToAttend = 0 THEN 'False' ELSE 'True' END) AS FailedToAttend,
(CASE WHEN S.Experience = '.' THEN '' ELSE S.Experience END) AS Experience
FROM
Customer C
INNER JOIN
Signposting S on S.CustomerID = C.CustomerID
INNER JOIN
Stakeholder ST on ST.StakeholderID = S.StakeholderID
WHERE
(S.SignpostDate >= '2001-01-01' And S.SignpostDate <= '2015-01-01')
AND (S.StakeholderID in (1,2,3,4,5,6,7,52,53,55,70,71,73))
--AND (S.Experience in (@Experience))
--AND (S.SignpostingType in (@SignpostType))
AND
CASE @Attended
WHEN 0 THEN (S.Attended = 1 AND S.FailedToAttend = 0)
WHEN 1 THEN (S.Attended = 0 AND S.FailedToAttend = 1)
WHEN 2 THEN (S.Attended = 0 AND S.FailedToAttend = 0)
END
問題在於最終的AND條件。 根據@Attended
的值,我希望在查詢中使用不同的列值。
我知道我可以在存儲過程中動態地做到這一點,但是有人要求我寫一些可以在SSRS中包含所有SQL的東西。 我只是想確保在我繼續選擇之前,先要用盡我的所有選擇。
在此先感謝您的時間和幫助。
可以使用AND
和OR
語句的組合來完成-此處無需CASE
。
AND (
(@Attended = 0 AND S.Attended = 1 AND S.FailedToAttend = 0) OR
(@Attended = 1 AND S.Attended = 0 AND S.FailedToAttend = 1) OR
(@Attended = 2 AND S.Attended = 0 AND S.FailedToAttend = 0) )
SELECT
(C.Forename + ' ' + C.Surname) as Fullname,
C.NINO,
S.SignpostingType, ST.StakeholderDesc, S.SignpostDate,
A.Attended,
A.FailedToAttend,
(CASE WHEN S.Experience = '.' THEN '' ELSE S.Experience END) AS Experience
FROM
Customer C
INNER JOIN
Signposting S on S.CustomerID = C.CustomerID
INNER JOIN
Stakeholder ST on ST.StakeholderID = S.StakeholderID
INNER JOIN
(VALUES
(0,'True' ,'False'),
(1,'False','True' ),
(2,'False','False')
) A(Code,Attended,FailedToAttend) on A.Code = @Attended
WHERE
(S.SignpostDate >= '2001-01-01' And S.SignpostDate <= '2015-01-01')
AND (S.StakeholderID in (1,2,3,4,5,6,7,52,53,55,70,71,73))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.