1

ROLLUP 関数を使用してクエリを実行しようとしています。

私のクエリが次のとおりであると仮定します。

SELECT  GEN.orgId,GEN.locId,GEN.rvcId
GEN.rvcName,GEN.menuItemID,GEN.menuItemName , SUM(salesTotal) as
salesTotal FROM GEN  GROUP BY  GEN.orgId,GEN.locId,
GEN.rvcName,GEN.menuItemID,GEN.menuItemName  ORDER BY GEN.menuItemName

このクエリの出力は次のとおりです。

orgId  locId  rvcName          menuItemID    menuItemName        salesTotal
10200  10002  Sydney Retail    10870         Cho Milk Shake        7.500000
10200  10002  Sydney Wholesale 10870         Cho Milk Shake        7.500000
10200  10002  Sydney Retail    10850         Berry Milk Shake     10.920000
10200  10002  Sydney Wholesale 10850         Berry Milk Shake     10.920000
10200  10002  Sydney Retail    10898         Apple Custard         5.460000
10200  10002  Sydney Wholesale 10898         Apple Custard         5.460000

クエリに GROUPING と ROLLUP を適用すると、次のようになります。

SELECT GEN.orgId,GEN.locId,  GEN.menuItemID, GEN.menuItemName,
CASE WHEN GROUPING( GEN.rvcName) = 1
    THEN 'Grand Total'
    ELSE GEN.rvcName END as rvcName
,SUM(salesTotal) as salesTotal
GROUP BY GEN.orgId,GEN.locId, GEN.rvcId, GEN.rvcName, GEN.menuItemID, GEN.menuItemName WITH ROLLUP  
ORDER BY   GEN.menuItemID asc   

このクエリは次のように出力します (ベリー ミルク シェイクのみ)。

orgId   locId   menuItemID  menuItemName    rvcName           salesTotal
10200   10002   NULL            NULL             Sydney Retail     10.920000
10200   10002   NULL            NULL             Grand Total       10.920000
10200   10002   NULL            NULL             Sydney Wholesale  10.920000
10200   10002   NULL            NULL             Grand Total       10.920000
10200   10002   NULL            NULL             Grand Total       21.840000
10200   NULL    NULL            NULL             Grand Total       21.840000
NULL    NULL    NULL            NULL             Grand Total       21.840000
10200   10002   10850           Berry Milk Shake Sydney Wholesale  10.920000
10200   10002   10850           NULL             Sydney Wholesale  10.920000
10200   10002   10850           Berry Milk Shake Sydney Retail     10.920000
10200   10002   10850           NULL             Sydney Retail     10.920000

私の質問は、このクエリで作成された不要なデータが非常に多いことです。クエリを絞り込んで、以下のようなものを作成するにはどうすればよいですか。前もって感謝します。

私が達成したいことは次のとおりです。

orgId  locId  rvcName           menuItemID    menuItemName          salesTotal
10200  10002  Sydney Retail     10870         Cho Milk Shake        7.500000
10200  10002  Sydney Wholesale  10870         Cho Milk Shake        7.500000
10200  10002  ALL               10870         Cho Milk Shake       15.000000
10200  10002  Sydney Retail     10850         Berry Milk Shake     10.920000
10200  10002  Sydney Wholesale  10850         Berry Milk Shake     10.920000
10200  10002  ALL               10850         Berry Milk Shake     21.840000
10200  10002  Sydney Retail     10898         Apple Custard         5.460000
10200  10002  Sydney Wholesale  10898         Apple Custard         5.460000
10200  10002  ALL               10898         Apple Custard        10.920000
4

1 に答える 1

0

この質問にもう一度感謝します。ここで追加したいことの 1 つは、ここで期待しているのと同じ結果を得ることができないということです。その背後にある理由は、rvcName 列のデータが思い通りにならないからです。group by 関数を使用すると、クエリに含めたすべての列データがグループ化されます。

そのため、Sydney Retail と Sydney Wholesale はすべて 1 つのグループにまとめられます。これにより、希望どおりの結果が確実に得られます。予想される回答に表示されている場合は、rvcName を除くすべての列のデータがグループ化されています。

それで、これがあなたの質問です、これがあなたを導くことを願っています...

orgid,locid,rvcname, menuitemname,menuitemid, sum(salesTotal) を、世代グループから orgid,locid, rvcName,menuItemName, menuitemid による「総売上」としてロールアップで選択します

これにより、次のような結果が得られます

orgid locid rvcname menuitemname menuitemid 合計販売
1 2 シドニー小売りアップル カスタード 30 5.46
1 2 シドニー小売りアップル カスタード NULL 5.46
1 2 シドニー小売りベリー シェイク 20 10.92
1 2 シドニー小売りベリー シェイク NULL 10.92
1 2 シドニー小売りミルク シェイク 10 7.5
ney 1 2 syd小売ミルクシェイク NULL 7.5
1 2 シドニー小売 NULL NULL
23.88 1 2 シドニー卸売アップルカスタード 30 5.46
1 2 シドニー卸売アップルカスタード NULL 5.46
1 2 シドニー卸売ベリーシェイク 20 10.92
1 2 シドニー卸売ベリーシェイク NULL 10.92
1 2 syndney ホールセール ミルク シェーク 10 7.5
1 2 syndney ホールセール ミルク シェーク NULL 7.5
1 2 syndney ホールセール NULL NULL 23.88
1 2 NULL NULL NULL 47.76
1 NULL NULL NULL NULL 47.76
NULL NULL NULL NULL NULL 47.76

問題の領域を理解していただければ幸いです...唯一のことは、グループ関数/集計関数を使用すると、同様のデータがすべてグループ化されることです。

結果のテキストが乱雑に見える場合は、Excel に貼り付けてみてください。結果を SQL Server から Excel にコピーしたにもかかわらず、乱雑に見える理由がわかりません。

それでも疑問がある場合は、遠慮なくお知らせください。

敬具、アシェイ(ムンバイ/インド)

于 2013-12-13T05:16:05.210 に答える