查询SQL Server分组。使用SQL Server 2012。
我们有几个表,比如订单和订单详细信息(1..*关系(。假设Orders表具有以下列:OrderID
、OrderDate
和OrderDetailsOrderID
、OrderDetailID
、ProductID
、IsGift
(有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