Jov*_*ano 14 sql-server group-by
我正试图从订单查看订单.在我看来,我确实有一些行具有完全相同的值,但我想在orderid上对这些值进行分组,并获取该订单数量的总和.
我的观点结果如下:
Order_id Customer_id Article_id Delivery_date Quantity
---------------------------------------------------------------------------
PR10.001 11 20.001a 17-04-2013 1
PR10.001 11 20.001a 17-04-2013 1
PR10.001 11 20.001a 17-04-2013 1
PR13.001 15 41.022b 19-04-2013 1
PR13.001 15 41.022b 19-04-2013 1
Run Code Online (Sandbox Code Playgroud)
我想做的事情如下:
SELECT Order_id, Customer_id Article_id, Delivery_date, sum(Quantity)
FROM Orders
GROUP BY Order_id
Run Code Online (Sandbox Code Playgroud)
得到类似的东西:
Order_id Customer_id Article_id Delivery_date Quantity
---------------------------------------------------------------------------
PR10.001 11 20.001a 17-04-2013 3
PR13.001 15 41.022b 19-04-2013 2
Run Code Online (Sandbox Code Playgroud)
但是我知道用一个列分组是不可能的,否则你会收到消息:
[...]在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中.
是否有另一种可能性或解决方法可以按SQL Server中的一个特定列进行分组?
Tim*_*ter 18
您可以使用CTE
with SUM(Quantity)OVER(PARTITION BY Order_id)
+ ROW_NUMBER
从订单组中挑选所需的行:
WITH cte
AS (SELECT order_id,
customer_id,
article_id,
delivery_date,
quantity=Sum(quantity)
OVER(
partition BY order_id),
rn = Row_number()
OVER(
partition BY order_id
ORDER BY delivery_date ASC)
FROM orders)
SELECT order_id,
customer_id,
article_id,
delivery_date,
quantity
FROM cte
WHERE rn = 1
Run Code Online (Sandbox Code Playgroud)
但是,您想要的结果似乎不正确(编辑问题)
这是我的结果:
ORDER_ID CUSTOMER_ID ARTICLE_ID DELIVERY_DATE QUANTITY
PR10.001 11 20.001a 17-04-2013 3
PR13.001 15 41.022b 19-04-2013 2
Run Code Online (Sandbox Code Playgroud)
小智 9
假设其他列在功能上依赖于分组列,则最简单的答案是
一个.按其他列分组:
SELECT Order_id, Customer_id, Article_id, Delivery_date, sum(Quantity)
FROM Orders
GROUP BY Order_id, Customer_id, Article_id, Delivery_date
Run Code Online (Sandbox Code Playgroud)
要么
湾 使用聚合函数,例如max
:
SELECT Order_id, max(Customer_id), max(Article_id), max(Delivery_date), sum(Quantity)
FROM Orders
GROUP BY Order_id
Run Code Online (Sandbox Code Playgroud)
我个人的偏好是第二种方法,因为我认为它比第一种方法更清晰,表明分组实际需要哪些项目,而不是仅仅为了绕过未组合/未分组的列问题而进行分组.
归档时间: |
|
查看次数: |
54873 次 |
最近记录: |