SQL以自定义方式聚合
查询SQL Server分组。使用SQL Server 2012 我们有两个表-比如订单和订单详细信息(1..*关系)。 假设Orders表具有以下列:SQL以自定义方式聚合,sql,sql-server,Sql,Sql Server,查询SQL Server分组。使用SQL Server 2012 我们有两个表-比如订单和订单详细信息(1..*关系)。 假设Orders表具有以下列: OrderID,OrderDate 订单详细信息已经发布 OrderID,OrderDetailID,ProductID,IsGift(有Y,N个值),GiftAmt 如果至少有一个OrderDetail的顺序为IsGift=Y,那么如何查询这些表以获得所有订单以及HasGift列,该列将为Y,否则HasGift将为N 例如 OrderID
OrderID
,OrderDate
订单详细信息已经发布
OrderID
,OrderDetailID
,ProductID
,IsGift
(有Y,N个值),GiftAmt
如果至少有一个OrderDetail的顺序为IsGift=Y,那么如何查询这些表以获得所有订单以及HasGift列,该列将为Y,否则HasGift将为N
例如
OrderID Date
1 2020-05-06
2 2020-06-22
3 2020-07-02
您是如何获得
60
?为什么OrderID=3
在详细信息表中,而不在详细信息表中?您的数据模型似乎有问题。oops-更正了预期输出。10代表#2,60代表#3您是如何获得60
?为什么OrderID=3
在详细信息表中,而不在详细信息表中?您的数据模型似乎有问题。oops-更正了预期输出。第二组10人,第三组60人
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