2013-04-13 362 views
2

我想知道使用GROUP BY語句將每個結果分組orderid的最佳方法。使用GROUP BY按orderid分組訂單

當前查詢:

SELECT T.orderid, 
     Inventory.partid, 
     Inventory.Description, 
     OrderItems.Qty, 
     '$' + STR(Inventory.price,8,2) AS UnitPrice, 
     '$' + STR(OriginalCost,8,2) AS OriginalCost, 
     '$' + STR(QuantityDiscount,8,2) AS QuantityDiscount, 
     '$' + STR((OriginalCost - QuantityDiscount),8,2) AS FinalCost 
    FROM (
     SELECT Orders.Orderid, Inventory.partid, Description, Qty, 
       Inventory.price AS UnitPrice, 
       (OrderItems.Qty * Inventory.price) AS OriginalCost, 
       CASE WHEN OrderItems.Qty >= 5 
        THEN ((OrderItems.Qty * Inventory.price) * .05) 
        WHEN OrderItems.Qty >= 10 
        THEN ((OrderItems.Qty * Inventory.price) * .10) 
        ELSE 0 
       END AS QuantityDiscount 
     FROM Orders,OrderItems,Inventory 
     ) AS T 
    JOIN OrderItems ON OrderItems.orderid = OrderItems.orderid 
    JOIN Inventory ON ORDERITEMS.partid = Inventory.partid 
ORDER BY T.QTY DESC 

的DB圖:

enter image description here

示例結果 這是結果我從目前得到的代碼的一部分。我希望所有具有相同ID的訂單應該組合在一起。

SELECT orderid, 
     partid, 
     sum(Qty) 
    FROM yourTable 
GROUP BY oderid, partid 

所以,這組由oderidpartid表,並返回Qty各組的總和:

orderid partid Description Qty UnitPrice OriginalCost QuantityDiscount FinalCost 
------- ------ ----------- ---- --------- ------------ ---------------- --------- 
6148 1006 gizmo  1 $ 11.35 $ 113.50 $ 5.67  $ 107.83 
6148 1006 gizmo  1 $ 11.35 $ 113.50 $ 5.67  $ 107.83 
6148 1006 gizmo  1 $ 11.35 $ 113.50 $ 5.67  $ 107.83 
6148 1006 gizmo  1 $ 11.35 $ 113.50 $ 5.67  $ 107.83 
6148 1006 gizmo  1 $ 11.35 $ 113.50 $ 5.67  $ 107.83 
6148 1006 gizmo  1 $ 11.35 $ 113.50 $ 5.67  $ 107.83 
6148 1006 gizmo  1 $ 11.35 $ 113.50 $ 5.67  $ 107.83 
6148 1006 gizmo  1 $ 11.35 $ 113.50 $ 5.67  $ 107.83 
6148 1006 gizmo  1 $ 11.35 $ 113.50 $ 5.67  $ 107.83 
+1

所以,你要9行絕對相同的? –

+0

到目前爲止您嘗試了什麼?如果你只是用'T.orderid'分組,你不能使用任何'Inventory.partid'等字段。 –

+0

我不希望行是相同的,他們不應該是。 – zeisler

回答

1

,如果你想仍然得到部分信息一simplyfied例子。有關如何使用group by的更多詳情,請給Google一個機會。這裏是我立即找到的one tutorial

+0

當我將GROUP BY添加到我的代碼中時,我得到「Column'Inventory.price'在選擇列表中無效,因爲它不包含在聚合函數或GROUP BY子句中。」 – zeisler

+0

是的,這就是我對你的問題的評論。這就是'分組'的工作原理。 –

0

您也可以使用SELECT語句DISTINCT關鍵字,而不是GROUP BY子句

SELECT DISTINCT 
     Col1, 
     Col2, 
     ... 
FROM ...