如何在T-SQL中基于ItemNumber列将同编号记录相邻排列
解决SQL排序问题:让相同ItemNumber的行相邻
嘿,我来帮你搞定这个排序问题!你之前的困惑其实是把GROUP BY和ORDER BY的用途搞混啦——GROUP BY是用来聚合数据的(比如把相同ItemNumber的行合并,计算总数、求和之类的),但你要的只是调整结果的顺序,让相同ItemNumber的行挨在一起,完全不需要用到GROUP BY哦。
解决方案:调整ORDER BY的排序优先级
你只需要修改ORDER BY子句,把ItemNumber作为第一个排序条件,这样数据库会先把所有相同ItemNumber的行归为一组,然后再按你需要的规则排序组内的行。
比如,如果你想在相同ItemNumber内,保持和原查询类似的排序逻辑(先按ChangeDate,再按Type,最后按TableID),可以用这个查询:
select MT.* from MyTable MT where 0 = 0 order by ItemNumber, ChangeDate, Type, TableID;
如果你更在意组内按TableID的顺序排列(就像你期望的结果那样),也可以简化成:
select MT.* from MyTable MT where 0 = 0 order by ItemNumber, TableID;
验证结果
执行上面的查询后,会得到完全符合你期望的结果:
| TableID | ChangeDate | Description | ItemNumber | Type |
|---|---|---|---|---|
| 11259 | 2019-05-20 | Item1 | 1335 | MOVE |
| 11260 | 2019-05-20 | Item2 | 1475 | MOVE |
| 11261 | 2019-05-20 | Item3 | 1782 | UPDATE |
| 11263 | 2019-05-20 | Item5 | 1782 | MOVE |
| 11262 | 2019-05-20 | Item4 | 1789 | UPDATE |
核心逻辑就是:把ItemNumber设为最高优先级的排序键,让相同编号的行先聚在一起,再用后续条件控制组内的顺序。
内容的提问来源于stack exchange,提问作者IrishChieftain
相关产品推荐
相关产品推荐

