【问题标题】:Grand Totals with Rollup汇总汇总
【发布时间】:2014-05-10 02:17:23
【问题描述】:

按县和季度查询总计。尝试在底部添加所有县的总计以及所有县的季度总计。

添加了汇总代码,但没有返回任何内容,表相同,没有总计

select  isnull(convert(VARCHAR,DCOUNTYNAME),'GRAND TOTAL') AS  County, 
    Year(DDATE) as Year, ---selects year value for total and quarter totals
    count(*) as Total, ---counts year totals
    sum(case when DATEPART(q, DDATE)=1 then 1 else 0 end) as Q1,
    sum(case when DATEPART(q, DDATE)=2 then 1 else 0 end) as Q2,
    sum(case when DATEPART(q, DDATE)=3 then 1 else 0 end) as Q3,
    sum(case when DATEPART(q, DDATE)=4 then 1 else 0 end) as Q4
into #tfinal
from Cert
where FLAG = 'o' and year(cast(ddDate as date)) ='2013' 
group by DCOUNTYNAME,
         Year(DDATE) with rollup

现在的结果

County      Year    Total   Q1  Q2  Q3  Q4
IMPERIAL    2013    129 5   20  100 4
FRESNO      2013    67  19  16  15  17
SAN DIEGO   2013    408 70  66  94  194

想要得到的结果

County      Year    Total   Q1  Q2  Q3  Q4
IMPERIAL    2013    129 5   20  100 4
FRESNO      2013    67  19  16  15  17
SAN DIEGO   2013    408 70  66  94  194
Grand Total         595 94 106 209  215

【问题讨论】:

  • 尝试删除 into #tfinal 并看到它出现。
  • @Mihai:那为什么会有不同的表现呢?
  • 我在我的数据库中尝试了一些非常相似的东西,它对我有用。如果您愿意提供带有 SQL Fiddle 的架构,也许我们可以提供帮助
  • @NePh 我在想 ROLLUP 可能会返回 NULL 所以它可能与他的表冲突。
  • @Mihai:由于临时表是与SELECT ... INTO一起创建的,我认为它不会与它发生冲突。

标签: sql tsql


【解决方案1】:

听起来,根据 cmets,您可能已经实现了您正在寻找的结果。这是另一种方法,该方法允许您明确控制总计的显示方式。

With CTE as (
--Insert Existing query without rollup here
)

Select * From CTE

Union All

Select 'Grand Total' as County
    , null as Year
    , SUM(Total) as Total
    , SUM(Q1) as Q1
    , SUM(Q2) as Q2
    , SUM(Q3) as Q3
    , SUM(Q4) as Q4

From CTE

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-19
    • 1970-01-01
    • 2011-12-05
    • 2018-04-23
    • 2014-06-26
    • 1970-01-01
    • 2019-06-01
    • 2021-04-28
    相关资源
    最近更新 更多