如何将同一列详情的其他行置空?附SQL查询及结果
解决方法:将相同订单号的非首行订单号置空
你想要的应该是同一个OrderNumber对应的多条记录里,只保留第一条(CouponRowId=1)的订单号,其余行的OrderNumber置空对吧?直接基于你现有的SQL查询,添加一个CASE判断语句就能实现:
SELECT CASE WHEN CouponRowId = 1 THEN o.OrderNumber ELSE NULL END AS OrderNumber, oi.Sku, SUM(ISNULL(oi.Price * oi.Quantity, 0)) AS Price, DENSE_RANK() OVER(PARTITION BY o.OrderNumber ORDER BY oi.Sku) AS CouponRowId FROM ac_OrderItems oi INNER JOIN ac_Orders o ON oi.OrderId = o.OrderId INNER JOIN ac_OrderShipments os ON oi.OrderShipmentId = os.OrderShipmentId WHERE (oi.OrderItemTypeId IN (5)) GROUP BY o.OrderNumber, oi.Sku
实现逻辑
核心就是利用你已经生成的CouponRowId字段做条件判断:
- 当
CouponRowId等于1时,保留原OrderNumber的值 - 其余情况返回
NULL(也就是置空)
调整后你的查询结果会变成这样:
| Sku | Price | CouponRowId |
|---|---|---|
| BLACKBERRY | -5.6900 | 1 |
| LEM... | xxxxxx | 2 |
如果你的场景需要显示空字符串而非NULL,可以把ELSE NULL改成ELSE '',不过一般来说用NULL更符合数据库的空值规范。
内容的提问来源于stack exchange,提问作者Mitesh Jain
相关产品推荐
相关产品推荐

