SQL以自定义方式聚合

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

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

我们有两个表-比如订单和订单详细信息(1..*关系)。 假设Orders表具有以下列:
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