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を使用できるように、SQL2005で使用する必要がありますcase grouping

4

3 に答える 3

1

問題をもう少しよく理解したので、最初の提案は、データベースが送信するものをバーフするだけでなく、プレゼンテーション層を少しスマートにすることです。

ただし、一時テーブルで説明した混乱の代わりに、なぜこのようなことができないのかわかりません。

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

気にしないでください、私はこれらの結果を一時テーブルに入れ、それらの行を削除してから、一時テーブルから選択するだけです。

于 2013-02-28T22:14:49.093 に答える
0

代わりにCTEを使用してみませんか?ロールアップによってすべての行を生成したくない場合は、-によって基本グループに戻りますが、CTE内で実行します。たとえば、CTE as(<>)select * from cte union all select sum(of each field)from CTE-つまり総計

正しく順序付けられるように、CTE出力(たとえば1)に定数を導入し、最後の行に出力2を導入する必要がある場合があります。

于 2013-03-01T11:57:26.647 に答える