使用GROUP BY按orderid对订单进行分组

时间:2013-04-13 19:37:07

标签: sql sql-server group-by

我想知道使用orderid语句按GROUP BY对每个结果进行分组的最佳方法。

当前查询:

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

数据库图表:

enter image description here

示例结果 这是我从当前代码中得到的结果的一部分。我希望所有具有相同ID的订单应该组合在一起。

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

2 个答案:

答案 0 :(得分:1)

一个简单的例子,如果你还想获得部分信息:

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

因此,这会按oderidpartid对表格进行分组,并为每个组返回Qty的总和。有关如何使用group by的详细信息,请给予Google一次机会。我立即找到one tutorial

答案 1 :(得分:0)

此外,您可以使用带有DISTINCT关键字的SELECT语句而不是GROUP BY子句

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