0

这需要在 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

这返回: 在此处输入图像描述

我如何调整代码以不实际显示卷起的行?意思是删除最后 3 行或其中带有 [ ] 的任何内容。我需要Rollup在 SQL 2005 中使用,所以我可以使用case grouping.

4

3 回答 3

1

现在我对这个问题有了更好的理解,我的第一个建议是让你的表示层更聪明一点,而不是只管数据库发送给它的任何东西。

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

SELECT * FROM 
(
  ...your query above...
) AS x
WHERE Register <> '[Register]';
于 2013-02-28T22:46:32.450 回答
0

为什么不使用 CTE 代替?如果您不想要汇总生成的所有行,请返回到基本组 - 但在 CTE 内执行,例如使用 CTE 作为 ( <> ) select * from cte union all select sum(of each field) from CTE——即总计

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

于 2013-03-01T11:57:26.647 回答
0

没关系,我只是将这些结果放入临时表中,删除了这些行,然后从临时表中进行选择。

于 2013-02-28T22:14:49.093 回答