SSRS的次级运行总计-SQL Server

SSRS的次级运行总计-SQL Server,sql,sql-server,reporting-services,Sql,Sql Server,Reporting Services,我当前有一个看起来类似下图的数据集: 基本上,全年都有案件开审和结案。我被要求做一个报告(最终将是一个条形字符),按月份和案例类型总结案例总数(唯一订阅ID的计数) 不过,我遇到的问题是,他们希望它作为一个连续的总数。因此,如果该案件创建于2017年1月,2017年3月仍在审理中,他们希望该案件在2017年3月仍然有效。只有在案件结束后的一个月,他们才希望它不再计入一个月的总数 因此,基本上,如果2016年12月发生了10起开放式2型案件,但12月没有结案,2017年1月没有新的开放式案件,那

我当前有一个看起来类似下图的数据集:

基本上,全年都有案件开审和结案。我被要求做一个报告(最终将是一个条形字符),按月份和案例类型总结案例总数(唯一订阅ID的计数)

不过,我遇到的问题是,他们希望它作为一个连续的总数。因此,如果该案件创建于2017年1月,2017年3月仍在审理中,他们希望该案件在2017年3月仍然有效。只有在案件结束后的一个月,他们才希望它不再计入一个月的总数

因此,基本上,如果2016年12月发生了10起开放式2型案件,但12月没有结案,2017年1月没有新的开放式案件,那么2017年1月将显示10起开放式2型案件。如果同样的10个案例在1月份没有结案,那么它们将出现在2月份的部分,并从2月份开始增加任何新开的2类案例

如果这听起来不太令人困惑,而且有人已经做过类似的工作,那么任何帮助都会非常感激。我的知识团队现在让我非常失望。

这并不是一个真正的“跑步总数”。这要简单得多

只需求一个CASE表达式的和,该表达式为在本月之前打开但在本月之前未关闭的每一行返回1。其他0

DECLARE @Test TABLE (
    CaseOpenYearMonth   VARCHAR(255),
    CaseType            INT,
    CaseStatus          VARCHAR(255),
    CaseCloseDate       DATE
)
INSERT INTO @Test VALUES
('2017-02', 1, 'Open', NULL),
('2016-12', 1, 'Open', NULL),
('2013-05', 5, 'Closed', '2013-10-22'),
('2017-02', 1, 'Open', NULL),
('2017-04', 1, 'Open', NULL),
('2017-01', 1, 'Open', NULL),
('2013-05', 2, 'Closed', '2013-07-08'),
('2013-10', 0, 'Closed', '2013-10-16'),
('2013-10', 2, 'Closed', '2014-02-06'),
('2016-11', 2, 'Open', NULL)


;WITH Preprocessed AS(
    SELECT
        YearMonth   = CaseOpenYearMonth,
        CaseType    = CaseType, 
        Opened      = 1,
        Closed      = 0
    FROM @Test YT

    UNION ALL 

    SELECT
        YearMonth   = FORMAT(CaseCloseDate, 'yyyy-MM'),
        CaseType    = CaseType,  
        Opened      = 0,
        Closed      = 1
    FROM @Test YT
    WHERE CaseCloseDate IS NOT NULL
), GroupedData AS (
    SELECT 
        YearMonth   = YearMonth,
        CaseType    = CaseType,
        Opened      = SUM(Opened),
        Closed      = SUM(Closed)
    FROM Preprocessed
    GROUP BY YearMonth, CaseType
)
SELECT 
        YearMonth   = YearMonth,
        CaseType    = CaseType,
        Opened      = Opened,
        Closed      = Closed,
        Active      = SUM(Opened) OVER (PARTITION BY CaseType ORDER BY YearMonth ROWS UNBOUNDED PRECEDING) 
                        - ISNULL(SUM (Closed) OVER (PARTITION BY CaseType ORDER BY YearMonth ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING), 0)
FROM GroupedData
ORDER BY YearMonth
如果病例数未更改,则不包括月份
如果要包含它,应在
预处理的
表中添加带零的行(在
打开的
关闭的
)?您还可以在您的答案中添加一个
create table
脚本,以及一些虚拟数据和所需的输出,以帮助我们帮助您。我认为@Zi0n1每个月都需要一些东西。例如,案例类型5,于2013-05年开始,于2013-10年结束。5月至10月,每月为开放状态。因此,这与现在是哪个月无关。不是哪个月是“现在”,而是哪个月是他显示的行的“当前月”。这就是我对这个问题的解释。稍微调整一下,它就完美了!非常感谢你这么做…它实际上比我想象的简单多了,但我可能想得太多了。很抱歉,我的问题的结果部分不够清晰,但你还是想出了一个很好的解决方案!:)