【问题标题】:Can I add multiple summary rows in TSQL?我可以在 SQL 中添加多个汇总行吗?
【发布时间】:2014-10-20 17:08:56
【问题描述】:

目标:我正在尝试为每所学校添加一个摘要行,并且我在 Fiddle 中进行了设置。

需求:

  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 

输出:

感谢您的帮助!

【问题讨论】:

  • 查看this link
  • 感谢@programmer43229 的链接。使用 GROUP BY 时,我仍然不知道如何保留所有其他列。
  • 你能用示例输出更新问题吗,这将非常有帮助
  • @Pradeep,Fiddle 的输出已附加。谢谢!

标签: sql sql-server tsql sql-server-2008-r2


【解决方案1】:

请意识到这几乎是在黑暗中拍摄。写这篇文章时我没有结构或示例数据。

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

这在你的小提琴中奏效了。我知道它不是按顺序排列的,但也许你可以用它运行?

【讨论】:

  • 感谢您的尝试,它无法运行。我确实在我的原始帖子中添加了一个 Fiddle 链接,以防万一。再次感谢。
  • 仅供参考,在@programmer43229 的回答之后,我编辑了我的原始帖子。
猜你喜欢
  • 1970-01-01
  • 2021-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-28
  • 1970-01-01
  • 2016-07-19
  • 1970-01-01
相关资源
最近更新 更多