使用Rollup将总计用于总计

时间:2018-03-22 15:53:46

标签: sql sql-server tsql sql-server-2012 ssms

我正在尝试使用Rollup,并想知道是否有办法在不使用子查询,CTE或临时表的情况下实现此目的。这是我的代码:

    select coalesce(Answer,case Grouping_ID(Answer) when 1 then 'Total' end) as Answer
    , Count(*) as CSAT_Count
    , Case Answer
        when 'Average' then 2*count(*)
        when 'Outstanding' then 3*Count(*)
        when 'Unsatisfactory' then 1*Count(*) 
      end as CSAT_Score
from CSAT_Table
Where Empl_ID = 98
Group by Answer
with rollup

结果如下:

     Answer               CSAT_Count    CSAT_Score
    ----------------------------------------------
     Average              13            26
     Outstanding          126           378
     Unstatisfactory      6             6
     Total                145           NULL

我想让CSAT_Score中的NULL返回反映得分的总和,但我在想因为得分依赖于COUNT(*)来计算,我无法得到Rollup这样做我,因为我不能按汇总分组。

就像我上面所说,我知道存储计数结果的子查询,CTE或Temp表可以正常工作,但由于我是新手使用Rollup,我想知道是否还有其他我可以做的事情使这项工作的功能。

由于

1 个答案:

答案 0 :(得分:0)

此版本的脚本使用rollup。 (顺便说一句,它会产生相同的结果)

  select coalesce(Answer,case Grouping_ID(Answer) when 1 then 'Total' end) as Answer
    , Count(*) as CSAT_Count
    , Sum(Case Answer
        when 'Average' then 2
        when 'Outstanding' then 3
        when 'Unsatisfactory' then 1
      end) as CSAT_Score
from CSAT_Table
Where Empl_ID = 98
Group by Answer
with rollup