Sql 使用GROUP BY按医嘱ID对订单进行分组

Sql 使用GROUP BY按医嘱ID对订单进行分组,sql,sql-server,group-by,Sql,Sql Server,Group By,我想知道使用groupby语句按orderid对每个结果进行分组的最佳方法 当前查询: SELECT T.orderid, Inventory.partid, Inventory.Description, OrderItems.Qty, '$' + STR(Inventory.price,8,2) AS UnitPrice, '$' + STR(OriginalCost,8,2) AS OriginalCost,

我想知道使用
groupby
语句按
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图:

样本结果 这是我从当前代码得到的结果的一部分。我希望所有具有相同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

如果仍要获取零件信息,请使用一个简化示例:

  SELECT orderid,
         partid,
         sum(Qty)
    FROM yourTable
GROUP BY oderid, partid
因此,这将根据
oderid
partid
对表进行分组,并返回每组的
Qty
之和。有关如何使用
groupby
的更多详细信息,请给谷歌一个机会。这里是我立即找到的。

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

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

所以你想要9行完全相同?到目前为止你尝试了什么?如果您只是按
T.orderid
进行分组,则不能使用任何
Inventory.partid
等字段。我不希望行完全相同,它们不应该完全相同。那么您的“示例结果”应该像您希望的那样,而不是像当前查询返回的那样。我们已经知道这不是您想要的。当我将GROUP BY添加到我的代码中时,我得到的“列”Inventory.price“在选择列表中无效,因为它既不包含在聚合函数中,也不包含在GROUP BY子句中。”是的,这就是我对您的问题的评论。这就是
groupby
的工作原理。