繁体   English   中英

SQL Server 2008 While循环和联合数据集

[英]SQL Server 2008 While Loop & Union data sets

我已经能够成功遍历一个计算查询,但是我希望所有数据都填充到1个数据集中,而不是多个数据集中。 我似乎找不到一种将某种UNION ALL添加到循环中的方法(dsnt在While循环中看起来很不错)。 我在此循环计算中的目标是获取当年每一天的年初至今总计(例如1/1 / 2014-1 / 2 / 2014、1 / 1 / 2014-1 / 3/2014。直到当前的1/1 / 2014-9 / 15/2014。)循环似乎是实现此目的的唯一方法,而查询中没有365个计算块(一年中的每一天为1个)。任何帮助关于这一点将不胜感激!

DECLARE @Lcounter INT
SET @Lcounter = 0

WHILE (@StartDte + @Lcounter < GetDate ( ))
BEGIN
    SELECT 
        YEAR(ACD.WorkDte) as WorkDte, 
        @StartDte + @Lcounter as RptType, 
        'Month' as RptLvl,
        ACD.LOB, 'NULL' as CIB, 'NULL' as SwitchNbr, 
        'NULL' as SkillNbr,  
        (SUM(ACD.ACDCallTotCt) + SUM(ACD.AbandonCallTotCt) - SUM(ACD.AbandonCall1Ct) )as CallsRcvd, 
        SUM(ACD.ACDCallTotCt) as CallsAnswrd
    FROM 
        #FinalResults ACD 
    WHERE 
        ACD.WorkDte >= @StartDte 
        AND ACD.WorkDte <= @StartDte + @Lcounter
    GROUP BY 
        Year(ACD.WorkDte), ACD.LOB

    SET @Lcounter = @Lcounter + 1
END 
GO

基本思想是,您需要某种“表”,其中一个记录代表循环中的每次迭代。 如果所有其他方法均失败,则可以通过在循环中的临时表中插入一条记录来完成此操作。 拥有该表后,您可以编写一个查询,将该查询再次与原始数据集进行联接,从而根本不需要当前循环。 所有数据作为单个查询的一部分进行检索。 在这种情况下,您还需要更新GROUP BY表达式,以将组聚合函数限制为与新表中的各个记录匹配的数据。

我将提供一个示例,但我需要一些示例数据,并且当前查询中的某些内容令人困惑:为什么将增加天数的字段命名为RptType ,如果要增加天数,为什么Level字段具有Month的价值?

如果这对你来说太复杂了,你可以把你现有的查询和刚刚从每次迭代的结果插入到一个临时表,然后选择在年底该临时表...虽然这远非一个合作的首选方式数据库。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM