SQL以自定义方式聚合



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

我们有几个表,比如订单和订单详细信息(1..*关系(。假设Orders表具有以下列:OrderIDOrderDate和OrderDetailsOrderIDOrderDetailIDProductIDIsGift(有Y、N值(、GiftAmt如果订单中至少有一个OrderDetail的IsGift=Y,那么我如何查询这些表以获得所有订单以及HasGift列,否则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
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

最新更新