SQL Server查询:找出多行PO记录中存在不同发货日期的异常订单
解决多行PO发货日期不一致的查询问题
我完全懂你的困扰——单纯用COUNT函数确实没法直接找出那些发货日期不一致的多行采购订单(PO),因为它只能统计行数,不管日期是否重复。不过换个思路,用COUNT(DISTINCT)结合分组查询就能轻松搞定。
核心查询:找出有问题的PO编号
假设你的采购订单表名为purchase_orders,包含po_number(PO编号)和ship_date(发货日期)字段,你可以用下面的语句直接筛选出发货日期不统一的PO:
SELECT po_number FROM purchase_orders GROUP BY po_number HAVING COUNT(DISTINCT ship_date) > 1;
GROUP BY po_number:把同一个PO的所有行归为一组COUNT(DISTINCT ship_date):统计当前PO下不同的发货日期数量HAVING COUNT(...) > 1:只保留那些存在多种发货日期的PO
查看具体错误行
如果需要看到这些问题PO对应的所有行详情,方便核对错误,可以用子查询关联原表:
SELECT po_number, ship_date, line_item_id, other_necessary_columns FROM purchase_orders WHERE po_number IN ( SELECT po_number FROM purchase_orders GROUP BY po_number HAVING COUNT(DISTINCT ship_date) > 1 ) ORDER BY po_number, ship_date;
这样就能按PO编号和发货日期排序,清晰看到同一个PO下的不同日期记录。
为什么之前的COUNT不行?
你之前用的COUNT(*)或者COUNT(ship_date)只会统计当前PO的总行数,比如一个PO有2行相同日期,会返回2;如果2行日期不同,也会返回2——根本没法区分日期是否一致。而COUNT(DISTINCT ship_date)专门统计去重后的日期数量,完美解决这个痛点。
内容的提问来源于stack exchange,提问作者user3496218
相关产品推荐
相关产品推荐

