【问题标题】:Multiple where clauses as dataset filters in SSRS多个 where 子句作为 SSRS 中的数据集过滤器
【发布时间】:2014-01-24 01:22:43
【问题描述】:

我正在创建一个 SSRS 报告,使用下面的 SQL 查询作为报告的单个数据集。如您所见,我有不同的 Where 子句,这些子句的使用取决于运行报告时选择的参数下拉列表。如果我只需要将单个值传递给单个值,我可以只使用下拉列表的选定值。但是,似乎我需要从下拉列表中传递一个虚拟值,然后根据该选择,执行过滤器 Switch 语句并确定要使用哪个 where 子句。我可以根据选择的下拉列表将 SQL 字符串传递给我的数据集吗?我还有什么其他方法可以做到这一点?

SELECT DISTINCT
    cip.CaseID
   ,cip.ProsNum AS FileNum
   ,cip.CaseInvPersLastName + ', ' + cip.CaseInvPersFirstName AS Attorney
   ,c.CaseStatusCode
   ,c.CaseStatusDesc
   ,dbo.ConvertTimeToClientTimeZone(ce.EventDT) AS OpenDate
   ,cip2.CaseInvPersLastName AS Respondent
   ,j.Dispo
   ,cd.Description AS DispoDesc
FROM jw50_Case c
INNER JOIN jw50_CaseInvPers cip
    ON cip.CaseID = c.CaseID AND cip.InvolveTypeCode = 'CP007' AND cip.CaseInvPersActive = 1
INNER JOIN jw50_CaseInvPers cip2
    ON cip2.CaseID = c.CaseID AND cip2.InvolveTypeCode = 'CP001' AND cip2.CaseInvPersActive = 1
INNER JOIN jw50_CaseEvent ce
    ON ce.EventID = (SELECT TOP 1 EventID FROM jw50_CaseEvent WHERE CaseID = cip.CaseID ORDER BY EventDT)
LEFT JOIN devJudgement j
    ON j.CaseID = cip.CaseID
LEFT JOIN devCountDispo cd
    ON cd.Code = j.Dispo

-- Sent to screening
--WHERE c.CaseStatusCode = 'CS007'

-- Closed
WHERE c.caseStatusCode = 'CS006' AND j.Dispo IN ('CD002','CD003') AND c.CaseTypeCode = 'TY001'

-- Closed - Info Only
--WHERE c.caseStatusCode = 'CS006' AND j.Dispo IN ('CD001') AND c.CaseTypeCode = 'TY001'

-- Reopened
--WHERE c.caseStatusCode = 'CS008' AND c.CaseTypeCode = 'TY001'

-- Under appeal
--WHERE c.caseStatusCode = 'CS009' AND c.CaseTypeCode = 'TY001'

    AND ce.EventDT >= @startDate AND ce.EventDT < @endDate + 1

Order BY cip.ProsNum

请提供任何帮助。谢谢。

【问题讨论】:

    标签: sql sql-server reporting-services ssrs-2008


    【解决方案1】:

    使用括号与OR 一起创建标准组,这样对于您传递的变量的任何值,您都可以使用一个查询并使用正确的WHERE 标准,例如:

      WHERE ((@variable = 1 AND c.CaseStatusCode = 'CS007')
             OR  (@variable = 2 AND c.caseStatusCode = 'CS006' AND j.Dispo IN ('CD002','CD003') AND c.CaseTypeCode = 'TY001')
             OR  (@variable = 3 AND  c.caseStatusCode = 'CS006' AND j.Dispo IN ('CD001') AND c.CaseTypeCode = 'TY001')
             OR  (@variable = 4 AND c.caseStatusCode = 'CS008' AND c.CaseTypeCode = 'TY001')
             OR  (@variable = 5 AND c.caseStatusCode = 'CS009' AND c.CaseTypeCode = 'TY001'))      
        AND ce.EventDT >= @startDate AND ce.EventDT < @endDate + 1
    

    在上述情况下,必须满足@variable = n 条件之一,且底线与日期条件一致,根据需要进行调整。

    【讨论】:

    • 效果最好!我正在考虑在过滤器表达式中做类似的事情,但感觉很脏。这样,我所做的就是将一个值传递给查询,所有工作都在 SQL 服务器上完成。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2021-07-31
    • 2014-05-10
    • 1970-01-01
    • 2016-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-17
    相关资源
    最近更新 更多