繁体   English   中英

如何在此数据透视查询中获取按行总和?

[英]How can I get the row-wise sum in this pivot query?

我有以下查询,该查询取消透视然后将表中的数据重新透视为某些存储过程使用的格式,这些存储过程动态地获取相同的数据:

2010-2011   4   3805    953 0   0   0   NULL    NULL    NULL    NULL    0.08399832  79.9034 20.0126 0   0   0   NULL    NULL    NULL    NULL
2011-2012   81  3867    971 0   0   0   NULL    NULL    NULL    NULL    1.646676    78.61354    19.73978    0   0   0   NULL    NULL    NULL    NULL
2012-2013   4   3706    918 0   0   0   NULL    NULL    NULL    NULL    0.08643042  80.07779    19.83578    0   0   0   NULL    NULL    NULL    NULL

这是SQL:

            DECLARE @r TABLE (SchoolYearDescription nvarchar(20), StackPosition int, Band_Count real, Band_Percent real)

        INSERT INTO @r
        SELECT y.SchoolYearDescription, rb.StackPosition, ISNULL(SUM(b.Band_Count), 0) AS 'Count', ISNULL(SUM(b.Band_Percent * b.Band_Count)
                    / NULLIF(SUM(b.Band_Count), 0), 0) AS 'Percent'
        FROM RosterSummaryData_Subject_Local g
            INNER JOIN RosterSummaryData_Subject_Local_Bands b ON g.pkSummarySubjectLocalID = b.fkSummarySubjectLocalID
            INNER JOIN PerformanceLevelReportBands rb ON b.fkBandID = rb.pkPerformanceLevelReportBandID
            RIGHT JOIN MM_SchoolYears y ON g.fkSchoolYearID = y.pkSchoolYearID
            INNER JOIN itot(@strYearIds, N',') tblYearIds ON y.pkSchoolYearId = tblYearIds.number
            INNER JOIN itot(@strDemoCodeIds, N',') tblDemoCodes ON g.fkDemoCommonCodeID = tblDemoCodes.number
            WHERE g.fkRosterSetID = @intRosterSetId
                AND g.fkTestInstanceID = CASE WHEN @intTestInstId = 0 THEN g.fkTestInstanceID ELSE @intTestInstId END
                AND g.fkTestTypeID = @intTestTypeId
                AND g.fkSchoolID = @intSchoolId
                AND g.fkGradeID = @intGradeId
                AND g.fkDepartmentID = @intDeptId
                AND g.fkCourseID = @intCourseId
                AND g.fkPeriodID = @intPeriodId
                AND g.fkTest_SubjectID IN (SELECT id FROM @tempSubs)
                AND rb.fkPerformanceLevelReportID = @intPerfLevelReportId
       GROUP BY y.SchoolYearDescription, rb.StackPosition
       ORDER BY y.SchoolYearDescription, rb.StackPosition

       SELECT * FROM
       (SELECT SchoolYearDescription ,
          CASE 
            WHEN col = 'Band_Count' THEN 'Count_'
            WHEN col = 'Band_Percent' THEN 'Percent_'
            END + CAST(StackPosition as varchar(1)) colName, value
       FROM @r
        UNPIVOT
        (
         value
         FOR col IN ([Band_Count], [Band_Percent])
        ) unpiv) src
        PIVOT
        (MAX(value)
        FOR colName IN (Count_0,Count_1,Count_2,Count_3,Count_4,Count_5,Count_6,Count_7,Count_8,Count_9,
        Percent_0,Percent_1,Percent_2,Percent_3,Percent_4,Percent_5,Percent_6,Percent_7,Percent_8,Percent_9) ) piv

   END

如何为每行添加一个Count_Include列,该列是Count_0到Count_9的总和?

感谢您的帮助,这超出了我的专业知识范围。

不太令人兴奋,但是您可以添加它们:

SELECT *
      ,ISNULL(Count_0,0) + ISNULL(Count_1,0) + ISNULL(Count_2,0) + ISNULL(Count_3,0) etc.. AS Count_Include
FROM
       (SELECT SchoolYearDescription ,
          CASE 
            WHEN col = 'Band_Count' THEN 'Count_'
            WHEN col = 'Band_Percent' THEN 'Percent_'
            END + CAST(StackPosition as varchar(1)) colName, value
       FROM @r
        UNPIVOT
        (
         value
         FOR col IN ([Band_Count], [Band_Percent])
        ) unpiv) src
        PIVOT
        (MAX(value)
        FOR colName IN (Count_0,Count_1,Count_2,Count_3,Count_4,Count_5,Count_6,Count_7,Count_8,Count_9,
        Percent_0,Percent_1,Percent_2,Percent_3,Percent_4,Percent_5,Percent_6,Percent_7,Percent_8,Percent_9) ) piv

暂无
暂无

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

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