这需要在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行或带有[]的任何内容。我需要在SQL 2005中使用Rollup
,因此我可以使用case grouping
。
答案 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以确保其正确排序。