如何在SQL Server 2019中实现交错排序以生成差异报表
解决全外连接结果的ID交错排序问题
你的查询已经准确筛选出了目标差异记录(ID仅存在于单表、或ID相同金额不同的情况),要实现按ID交错排序,只需在查询末尾添加基于统一ID基准的排序逻辑即可:
select t.ID as TranID, t.Amt as TranAmt, m.ID as ModID, m.Amt as ModAmt, -- 可选:添加来源标识,让报表更清晰 case when t.ID is null then '仅存在于#ModSum' when m.ID is null then '仅存在于#TranSum' else 'ID相同但金额差异' end as DiffType from #TranSum t full outer join #ModSum m on t.ID = m.ID where isnull(t.Amt, 0) <> isnull(m.Amt, 0) -- 核心排序逻辑:取非空的ID作为排序键,确保同ID记录相邻 order by coalesce(t.ID, m.ID)
关键说明:
coalesce(t.ID, m.ID)会优先取t.ID,如果t.ID为NULL(即该记录仅存在于#ModSum),则取m.ID,这样无论ID来自哪张表,相同ID的记录都会被归为一组,实现你要的交错排序效果。- 额外添加的
DiffType列可以帮你快速区分差异类型,让报表可读性更强,不需要的话可以直接去掉。
内容的提问来源于stack exchange,提问作者Caynadian
相关产品推荐
相关产品推荐

