2014-10-20 53 views
1

目标:我试图为每所学校添加一个汇总行,并且我在小提琴中设置了该行。我可以在TSQL中添加多个汇总行吗?

需求:

  1. 列表项我想每年的招生总数为史密斯小学,琼斯小学等

  2. 列表项我也想对所有摘要行水平(ES,MS,HS)。

  3. 列表项我还希望有一个总计所有级别的行。

Fiddle:

这是可能的TSQL?我正在运行SQL Server 2008 R2。

SELECT 
    schoolid, 
    sitename, 
    level, 
    area, 
    grade, 
    20122013ActualEnrollment , 
    20132014ActualEnrollment, 
    20152016ActualEnrollment 


    FROM supportContacts   

ORDER BY 
    CASE 
     WHEN Level= 'ES' THEN '1' 
     WHEN Level= 'MS' THEN '2' 
     WHEN Level= 'HS' THEN '3' 
    ELSE '4' 
    END 

, SiteName 

    , CASE 
     WHEN Grade = 'K' THEN '1' 
     WHEN Grade = '1' THEN '2' 
     WHEN Grade = '2' THEN '3' 
     WHEN Grade = '3' THEN '4' 
     WHEN Grade = '4' THEN '5' 
     WHEN Grade = '5' THEN '6' 
    ELSE '7' 
    END 

输出:

enter image description here

谢谢您的帮助!

+0

退房[此链接](http://stackoverflow.com/questions/ 21740326/rollup-function-replace-null-total-w-column-data-type-in​​t-not-varchar) – programmer43229 2014-10-20 17:21:16

+0

感谢link @ programmer43229。我仍然不知道如何保留所有其他列当使用GROUP BY – JM1 2014-10-20 17:26:56

+0

你可以更新与示例输出的问题,这将是非常有帮助的 – 2014-10-20 18:56:13

回答

0

请认识到这在黑暗中几乎是一个镜头。在撰写本文时,我没有结构或样本数据。

SELECT 
     SY12.[SchoolID] 
    , MAX(SY12.[SiteName]) 
    , MAX(SY12.[Level]) 
    , MAX(S.[AreaName]) 
    , SY12.[Grade] 
    , SY12.[TotalEnrollment] AS '2012-2013 Actual Enrollment' 
    , SY13.[TotalEnrollment] AS '2013-2014 Actual Enrollment' 
    ,  P.[2016]   AS '2015-2016 Projected Enrollment' 
FROM    
    [2012Cycle1_Data] AS SY12 
LEFT OUTER JOIN 
    [2013Cycle1_Data] AS SY13 ON SY12.SchoolID = SY13.[SchoolID] 
    AND SY12.Grade = SY13.Grade 
LEFT OUTER JOIN 
    [Projections] AS P ON SY12.SchoolID = P.[SchoolID] 
    AND SY12.Grade = P.Grade 
LEFT OUTER JOIN 
    v_Sites AS S ON SY12.SchoolID = S.SchoolID 
GROUP BY SY12.[SchoolID], SY12.[Grade] 
ORDER BY 
    CASE 
    WHEN SY12.Level= 'ES' THEN '1' 
    WHEN SY12.Level= 'MS' THEN '2' 
    WHEN SY12.Level= 'HS' THEN '3' 
    ELSE '4' 
END 
, SiteName 
, CASE 
    WHEN SY12.Grade = 'K' THEN '1' 
    WHEN SY12.Grade = '1' THEN '2' 
    WHEN SY12.Grade = '2' THEN '3' 
    WHEN SY12.Grade = '3' THEN '4' 
    WHEN SY12.Grade = '4' THEN '5' 
    WHEN SY12.Grade = '5' THEN '6' 
ELSE '7' 
END 

看起来我在查询中有拼写错误。 :(

SELECT 
    schoolid, 
    MAX(sitename), 
    MAX(level), 
    MAX(area), 
    grade, 
    SUM(20122013ActualEnrollment), 
    SUM(20132014ActualEnrollment), 
    SUM(20152016ActualEnrollment) 
FROM supportContacts   
GROUP BY schoolid, grade WITH ROLLUP 

,在你的提琴的工作。我知道这是不是因为园区有序的,但也许你可以用它运行?

+1

谢谢你的尝试,这不会运行我没有添加小提琴链接在我的原来的帖子,以防有用。再次感谢。 – JM1 2014-10-20 18:43:25

+0

仅供参考,在@ programmer43229的回答后,我编辑了我原来的帖子。 – JM1 2014-10-20 19:26:13

相关问题