You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 12:33:14