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
的工作原理。