仅在最后一行显示汇总

时间:2013-02-28 21:57:59

标签: sql-server-2008 sql-server-2005 rollup

这需要在SQL Server 2005和2008中工作,而无需调整兼容级别(如果可以的话)

Select 
    CASE GROUPING([Store ID]) WHEN 1 THEN '[Store ID]' ELSE [Store ID] END [Store ID],
    CASE GROUPING([Cashier]) WHEN 1 THEN '[Cashier]' ELSE [Cashier] END [Cashier],
    CASE GROUPING([Register]) WHEN 1 THEN '[Register]' ELSE [Register] END [Register],
    sum([Amex]) AS [Amex],
    sum([C.Card]) AS [C.Card],
    sum([Cash]) AS [Cash],
    sum([House Acct]) AS [House Acct],
    sum([MasterCard]) AS [MasterCard],
    sum([Str Cr]) AS [Str Cr],
    sum([Visa/MC]) AS [Visa/MC] 
from 
    #a13 
group by 
    [Store ID],
    [Cashier],
    [Register] 
with rollup

返回: enter image description here

我怎样才能调整代码而不是实际显示卷起的行?含义删除最后3行或带有[]的任何内容。我需要在SQL 2005中使用Rollup,因此我可以使用case grouping

3 个答案:

答案 0 :(得分:1)

现在我对这个问题有了一点了解,我的第一个建议就是让你的表示层更加智能,而不仅仅是为了调整数据库发送给它的东西。

但是我不确定为什么你不能做这样的事情,而不是你用临时表描述的混乱:

SELECT * FROM 
(
  ...your query above...
) AS x
WHERE Register <> '[Register]';

答案 1 :(得分:0)

没关系,我只是把这些结果放到临时表中,删除那些行然后只从临时表中选择。

答案 2 :(得分:0)

为什么不使用CTE呢?如果您不想要汇总产生的所有行,请返回基本组 - 但在CTE中执行此操作,例如: 以CTE为(              &LT;&GT;             ) 从cte中选择* 联合所有 从CTE中选择(每个字段的)总和 - 即总计

您可能必须在CTE输出中引入一个常量(例如1),并在最后一行输出2以确保其正确排序。