2014-01-17 52 views
2

我在SSRS中有一个报告,其中一个参数是基于某人是否参加了面试,未能参加或没有当前的反馈。SQL案例在哪里条款

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