2014-01-17 7 views
2

SSRS에서 보고서를 보았습니다. 매개 변수 중 하나는 한 사람이 인터뷰에 참석했는지, 참석하지 못했는지 또는 현재 피드백이 없는지에 따라 달라집니다. 다음과 같이where 절에있는 sql case

는 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 

문제는 최종 상태입니다. @Attended 값에 따라 다른 쿼리를 내 쿼리에 사용하고 싶습니다.

나는 동적으로 저장 프로 시저에서이를 수행 할 수 있지만 SSRS의 모든 SQL을 갖출 것을 요청 받았습니다. 나는이 일을 뒤로 미루기 전에 내 선택을 다 써 버리고 싶다.

시간과 도움을 미리 보내 주셔서 감사합니다.

답변

4

ANDOR 문을 조합하여 수행 할 수 있습니다. 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)) 
+0

덕분에, 그것은 치료를했다! –

+0

도움이 되었기 때문에 기쁩니다. –

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))