sql - 以自定义方式聚合 SQL
问题描述
查询 SQL Server 分组。使用 SQL Server 2012。
我们有几个表 - 比如说订单和订单详细信息(1..* 关系)。假设 Orders 表有以下列:
OrderID
,OrderDate
并且 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
解决方案
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
推荐阅读
- sql-server - 我的用户定义函数中的语法错误?
- c - 为什么必须在 rust 中初始化结构?
- python - 在 pandas 中为每个 groupby 创建具有条件的新数据框
- build - 寻找有关如何为 AST2600 构建 OpenBMC 的说明
- ffmpeg - 如何使用 ffmpeg 将多个视频文件与单个音频文件连接起来?
- hive - 气流找不到直线
- android - 在活动中安排广播和服务
- php - 不知道如何从 MySql Query 中获取数据
- c++ - 由于没有运算符“<<”与这些操作数匹配,程序无法运行
- html - Angular 9 Keyvalues 管道不是为生产而构建的