1
SELECT     
   ISNULL(Customer.Name, ' GRAND') AS CustomerName, 
   ISNULL(Item.ItemName, 'TOTAL') AS ItemName, 
   SUM(Item_Order.PriceAtDate) AS Price
FROM         
   Item_Order 
INNER JOIN
   Item ON Item_Order.ItemID = Item.ItemID 
INNER JOIN
   TheOrder ON Item_Order.OrderID = TheOrder.OrderID 
INNER JOIN
   Customer ON TheOrder.CustomerID = Customer.CustomerID
GROUP BY 
   Customer.Name, Item.ItemName, Item_Order.PriceAtDate WITH ROLLUP
ORDER BY 
   Customer.Name

結果:

CustomerName ItemName            Price
------------ ------------------- -------
GRAND        TOTAL               1380.46
Adrian       Hammer                21.88
Adrian       Hammer                21.88
Adrian       Soldering Iron        30.54
Adrian       Soldering Iron        30.54
Adrian       TOTAL                 52.42
Baker        Valve                 21.88
Baker        Valve                 21.88
Baker        TOTAL                 21.88

ご覧のとおり、ロールアップを使用して与えられた TOTAL は 30.54 と 21.88 を合計すると 52.42 になりますが、両方のアイテムが 2 回注文されます。したがって、個別の値だけでなく、実際の合計が必要になります。

誰かが私が間違っていることを知っていますか?

4

1 に答える 1

0

合計を行っている価格列(Item_Order.PriceAtDate)でグループ化を行うと、問題が発生すると思います:

Customer.Name, Item.ItemName, Item_Order.PriceAtDate WITH ROLLUP

代わりにサブクエリを使用してみてください

SELECT
    ISNULL(CustomerName, ' GRAND') AS CustomerName, 
    ISNULL(ItemName, 'TOTAL') AS ItemName, 
    Sum(Price) AS Price
FROM
(
SELECT     
   Customer.Name AS CustomerName,
   Item.ItemName AS ItemName,   
   Item_Order.PriceAtDate AS Price
FROM         
   Item_Order 
INNER JOIN
   Item ON Item_Order.ItemID = Item.ItemID 
INNER JOIN
   TheOrder ON Item_Order.OrderID = TheOrder.OrderID 
INNER JOIN
   Customer ON TheOrder.CustomerID = Customer.CustomerID
) as Test
GROUP BY 
   CustomerName, ItemName WITH ROLLUP
ORDER BY 
   CustomerName
于 2012-11-20T14:18:45.983 に答える