SQL Server 2019如何仅对Food类别订单分组其余逐行显示
SQL Server 2019 指定类别聚合其余行原样展示查询实现
实现思路
通过UNION ALL拼接两个结果集完成需求:
- 第一部分筛选所有
Category不等于Food的订单,直接返回原始字段、逐行展示 - 第二部分筛选所有
Category等于Food的订单,按业务规则聚合为单行,保证两个结果集的字段数量、顺序、数据类型完全一致即可
参考代码
以下示例中Food类聚合默认取最早订单日期、计算订单总金额,你可以根据实际业务调整聚合规则:
-- 返回非Food类别的全量原始订单 SELECT [ID], [Date], [Customer Name], [Total Amount], [Category] FROM Orders WHERE [Category] != 'Food' UNION ALL -- 聚合Food类别订单为单行 SELECT CAST(NULL AS INT) AS [ID], -- 若原ID为字符串类型可替换为'Food汇总'等标识值 MIN([Date]) AS [Date], -- 可替换为MAX([Date])取最晚订单日期 'Food类订单汇总' AS [Customer Name], -- 单客户场景可替换为MAX([Customer Name]) SUM([Total Amount]) AS [Total Amount], -- 可按需替换为COUNT/AVG等聚合函数 'Food' AS [Category] FROM Orders WHERE [Category] = 'Food'
注意事项
如果需要对Food类订单按特定维度(比如按客户、按月份)拆分聚合,只需要在第二部分查询中增加对应的
GROUP BY字段,同步调整SELECT后的字段对应关系,保证和第一部分字段类型匹配即可。
内容的提问来源于stack exchange,提问作者Bislim Pireva
相关产品推荐
相关产品推荐

