在 sql 服务器中创建总计行

Create a grand total row in sql server

我正在编写一个查询,其中 table 末尾应该有一个总行,它给出了 closedopenreassigned columns.

我可以做一个轴心,但不知道如何在最后放置一行。我在网上搜索过,但大多找到了创建列和行或仅创建列的解决方案。我很喜欢开发,对数据库不太了解。下面是我的支点。请让我知道我该怎么做。

select *
from 
(
  select [case owner] as AGENT, [final status]
  from StatusTable
) src
pivot
(
  count([final status])
  for [final status] in ([CLOSED], [OPEN], [REASSIGNED])
) piv

当前输出如下图

这里我想要一个额外的行,如下所示。

TOTAL | 2 | 8 | 2

您可以使用 UNION ALL 连接具有相同列的行集:

with ctePivot as (
    select *
    from 
    (
      select [case owner] as AGENT, [final status]
      from StatusTable
    ) src
    pivot
    (
      count([final status])
      for [final status] in ([CLOSED], [OPEN], [REASSIGNED])
    ) piv
)
select * from ctePivot
union all
select 'TOTAL', sum([CLOSED]), sum([OPEN]), sum([REASSIGNED]) from ctePivot

或者只有 GROUP BY ROLLUP 的更简单的变体:

select ISNULL([case owner], 'TOTAL') as AGENT, 
    SUM(CASE WHEN [final status]='CLOSED' THEN 1 ELSE 0 END) [CLOSED],
    SUM(CASE WHEN [final status]='OPEN' THEN 1 ELSE 0 END) [OPEN],
    SUM(CASE WHEN [final status]='REASSIGNED' THEN 1 ELSE 0 END) [REASSIGNED]
    from StatusTable
    GROUP BY ROLLUP ([case owner]);

假设 agent 是一个关键字段,您可以对其进行汇总并使用 GROUP BY ROLLUP():

select coalesce(piv.agent,'Grand Total') agent
    ,sum(piv.closed) closed
    ,sum(piv.open) open
    ,sum(piv.reassigned) reassigned
from 
(
  select [case owner] as AGENT, [final status]
  from StatusTable
) src
pivot
(
  count([final status])
  for [final status] in ([CLOSED], [OPEN], [REASSIGNED])
) piv
group by rollup(piv.agent)

如果您将查询编写为分组而不是数据透视,则可以使用 with rollup 获取总行。例如:

select
  [AGENT] = case when grouping([case owner])=1 then 'TOTAL' else [case owner] end,
  [CLOSED] = sum(case when [final status] = 'CLOSED' then 1 else 0 end),
  [OPEN] = sum(case when [final status] = 'OPEN' then 1 else 0 end),
  [REASSIGNED] = sum(case when [final status] = 'REASSIGNED' then 1 else 0 end)
from StatusTable
group by [case owner]
with rollup

http://sqlfiddle.com/#!3/e0bb5/8/0