首页 > 解决方案 > 以自定义方式聚合 SQL

问题描述

查询 SQL Server 分组。使用 SQL Server 2012。

我们有几个表 - 比如说订单和订单详细信息(1..* 关系)。假设 Orders 表有以下列: OrderIDOrderDate 并且 OrderDetails 有 OrderID, OrderDetailID, ProductID, IsGift(有 Y,N 值),GiftAmt 我如何查询这些表以获取所有 Orders 以及如果至少一个 OrderDetail 具有将为 Y 的 HasGift 列IsGift=Y 在该顺序中,否则 HasGift 将为 N。

例如

OrderID  Date
1        2020-05-06
2        2020-06-22
3        2020-07-02
OrderID  OrderDetailID    ProductID    IsGift     GiftAmt
1        1                123          N          NULL
1        2                356          N          NULL
2        1                335          Y          10
2        2                993          N          NULL
3        1                377          Y          10
3        2                453          N          NULL
3        3                343          Y          50
3        4                565          N          NULL
Expected o/p:
OrderID    OrderDate    HasGift     GiftSum 
1          2020-05-06   N           NULL
2          2020-06-22   Y           10
3          2020-07-02   Y           60

标签: sqlsql-server

解决方案


SELECT o.OrderID, 
       o.Date AS OrderDate
       COALESCE(MAX(od.IsGift), 'N') AS HasGift,
       SUM(od.GiftAmt) AS GiftSum
FROM Orders o LEFT JOIN OrderDetails od 
     ON o.OrderID = od.OrderID AND od.IsGift = 'Y'
GROUP BY o.OrderID, o.Date

推荐阅读