Sql server 按每组最小值排序
我尝试按PODID然后CYID排序,但有时t.ID会有多个PODID和/或CYID。具有相同t.ID的所有行应放在一起Sql server 按每组最小值排序,sql-server,tsql,sql-order-by,Sql Server,Tsql,Sql Order By,我尝试按PODID然后CYID排序,但有时t.ID会有多个PODID和/或CYID。具有相同t.ID的所有行应放在一起 SELECT DISTINCT t.ID AS TariffID, t.TradeID, pod.PODID, cy.CYID FROM TB_Import_Tariff_Tier t (NOLOCK) INNER JOIN TB_Import_Tariff_Tier_POD_Group_History pod (NOLOCK
SELECT DISTINCT
t.ID AS TariffID,
t.TradeID,
pod.PODID,
cy.CYID
FROM
TB_Import_Tariff_Tier t (NOLOCK)
INNER JOIN
TB_Import_Tariff_Tier_POD_Group_History pod (NOLOCK) ON t.ID = pod.ID
INNER JOIN
TB_Import_Tariff_Tier_CY_Group_History cy (NOLOCK) ON t.ID = cy.TariffID
ORDER BY
pod.PODID, cy.CYID
预期结果:
TariffID TradeID PODID CYID
------------------------------
185 18 1 17939
185 18 1 17941
246 18 1 17939
246 18 1 17941
266 18 1 17939
266 18 1 17941
280 18 1 17939
280 18 1 17941
285 18 1 17939
252 18 1 17945
编辑:样本太小,这是完整的结果,按t.ID、pod.PODID、cy.CYID排序
+----------+---------+-------+-------+
| TariffID | TradeID | PODID | CYID |
+----------+---------+-------+-------+
| 251 | 18 | 4 | 18091 |
| 252 | 18 | 1 | 17945 |
| 254 | 18 | 4 | 17939 |
| 254 | 18 | 4 | 17941 |
| 255 | 18 | 4 | 17936 |
| 256 | 18 | 8 | 18091 |
| 257 | 18 | 4 | 18093 |
| 261 | 18 | 4 | 17939 |
| 261 | 18 | 4 | 17941 |
| 262 | 18 | 8 | 17936 |
| 263 | 18 | 4 | 18093 |
| 266 | 18 | 1 | 17939 |
| 266 | 18 | 1 | 17941 |
| 267 | 18 | 4 | 17936 |
| 268 | 18 | 4 | 18093 |
| 271 | 18 | 8 | 17939 |
| 271 | 18 | 8 | 17941 |
| 272 | 18 | 1 | 17936 |
| 273 | 18 | 4 | 18093 |
| 274 | 18 | 4 | 18091 |
| 274 | 18 | 4 | 18093 |
| 275 | 18 | 4 | 17939 |
| 275 | 18 | 4 | 17941 |
| 276 | 18 | 8 | 17936 |
| 277 | 18 | 4 | 18091 |
| 279 | 18 | 1 | 18091 |
| 279 | 18 | 1 | 18093 |
| 280 | 18 | 1 | 17939 |
| 280 | 18 | 1 | 17941 |
| 281 | 18 | 4 | 18093 |
| 284 | 18 | 8 | 18093 |
| 285 | 18 | 1 | 17939 |
| 286 | 18 | 1 | 18091 |
| 287 | 18 | 4 | 18093 |
| 290 | 18 | 4 | 18091 |
| 290 | 18 | 4 | 18093 |
| 291 | 18 | 4 | 18091 |
| 292 | 18 | 4 | 18093 |
| 293 | 18 | 4 | 17947 |
| 294 | 18 | 4 | 17945 |
| 295 | 18 | 8 | 17939 |
| 295 | 18 | 8 | 17941 |
| 296 | 18 | 4 | 18091 |
| 296 | 18 | 4 | 18093 |
| 297 | 18 | 1 | 17936 |
| 300 | 18 | 4 | 18093 |
| 301 | 18 | 4 | 17936 |
| 302 | 18 | 8 | 18091 |
| 303 | 18 | 4 | 18093 |
| 306 | 18 | 4 | 18091 |
| 306 | 18 | 4 | 18093 |
| 307 | 18 | 4 | 17936 |
| 308 | 18 | 8 | 18093 |
| 310 | 18 | 8 | 18093 |
| 311 | 18 | 4 | 18093 |
| 312 | 18 | 4 | 17939 |
| 312 | 18 | 4 | 17941 |
| 313 | 18 | 4 | 17936 |
| 316 | 18 | 4 | 18091 |
| 316 | 18 | 4 | 18093 |
| 317 | 18 | 1 | 17936 |
| 318 | 18 | 1 | 18091 |
+----------+---------+-------+-------+
所有的PODID=1应该首先在一起,但如果同一t.ID有另一个PODID,它们应该在一起
SELECT DISTINCT
t.ID AS TariffID,
t.TradeID,
pod.PODID,
cy.CYID
FROM
TB_Import_Tariff_Tier t (NOLOCK)
INNER JOIN
TB_Import_Tariff_Tier_POD_Group_History pod (NOLOCK) ON t.ID = pod.ID
INNER JOIN
TB_Import_Tariff_Tier_CY_Group_History cy (NOLOCK) ON t.ID = cy.TariffID
ORDER BY
pod.PODID, cy.CYID
如果t.ID位于订单末尾,则仍然不正确,因为ID不在一起
+----------+---------+-------+-------+
| TariffID | TradeID | PODID | CYID |
+----------+---------+-------+-------+
| 272 | 18 | 1 | 17936 |
| 297 | 18 | 1 | 17936 |
| 317 | 18 | 1 | 17936 |
| 266 | 18 | 1 | 17939 |
| 280 | 18 | 1 | 17939 |
| 285 | 18 | 1 | 17939 |
| 266 | 18 | 1 | 17941 |
| 280 | 18 | 1 | 17941 |
| 252 | 18 | 1 | 17945 |
| 279 | 18 | 1 | 18091 |
| 286 | 18 | 1 | 18091 |
| 318 | 18 | 1 | 18091 |
| 279 | 18 | 1 | 18093 |
| 255 | 18 | 4 | 17936 |
| 267 | 18 | 4 | 17936 |
| 301 | 18 | 4 | 17936 |
| 307 | 18 | 4 | 17936 |
| 313 | 18 | 4 | 17936 |
| 254 | 18 | 4 | 17939 |
| 261 | 18 | 4 | 17939 |
| 275 | 18 | 4 | 17939 |
| 312 | 18 | 4 | 17939 |
| 254 | 18 | 4 | 17941 |
| 261 | 18 | 4 | 17941 |
| 275 | 18 | 4 | 17941 |
| 312 | 18 | 4 | 17941 |
| 294 | 18 | 4 | 17945 |
| 293 | 18 | 4 | 17947 |
| 251 | 18 | 4 | 18091 |
| 274 | 18 | 4 | 18091 |
| 277 | 18 | 4 | 18091 |
| 290 | 18 | 4 | 18091 |
| 291 | 18 | 4 | 18091 |
| 296 | 18 | 4 | 18091 |
| 306 | 18 | 4 | 18091 |
| 316 | 18 | 4 | 18091 |
| 257 | 18 | 4 | 18093 |
| 263 | 18 | 4 | 18093 |
| 268 | 18 | 4 | 18093 |
| 273 | 18 | 4 | 18093 |
| 274 | 18 | 4 | 18093 |
| 281 | 18 | 4 | 18093 |
| 287 | 18 | 4 | 18093 |
| 290 | 18 | 4 | 18093 |
| 292 | 18 | 4 | 18093 |
| 296 | 18 | 4 | 18093 |
| 300 | 18 | 4 | 18093 |
| 303 | 18 | 4 | 18093 |
| 306 | 18 | 4 | 18093 |
| 311 | 18 | 4 | 18093 |
| 316 | 18 | 4 | 18093 |
| 262 | 18 | 8 | 17936 |
| 276 | 18 | 8 | 17936 |
| 271 | 18 | 8 | 17939 |
| 295 | 18 | 8 | 17939 |
| 271 | 18 | 8 | 17941 |
| 295 | 18 | 8 | 17941 |
| 256 | 18 | 8 | 18091 |
| 302 | 18 | 8 | 18091 |
| 284 | 18 | 8 | 18093 |
| 308 | 18 | 8 | 18093 |
| 310 | 18 | 8 | 18093 |
+----------+---------+-------+-------+
在
orderby
子句中添加t.ID
。你试过这个吗?还是我的看法不同
SELECT DISTINCT
t.ID AS TariffID,
t.TradeID,
pod.PODID,
cy.CYID
FROM
TB_Import_Tariff_Tier t (NOLOCK)
INNER JOIN
TB_Import_Tariff_Tier_POD_Group_History pod (NOLOCK) ON t.ID = pod.ID
INNER JOIN
TB_Import_Tariff_Tier_CY_Group_History cy (NOLOCK) ON t.ID = cy.TariffID
ORDER BY
t.ID,pod.PODID, cy.CYID
如果我理解正确,您需要按如下顺序排列数据:
ORDER BY
MIN(PODID) OVER (PARTITION BY TariffID),
MIN(CYID) OVER (PARTITION BY TariffID),
TariffID,
PODID,
CYID
这将首先放置具有最小PODID和CYID的TariffID组,然后按单个PODID和CYID在每个TariffID内排序:
| TariffID | TradeID | PODID | CYID |
|----------|---------|-------|-------|
| 272 | 18 | 1 | 17936 |
| 266 | 18 | 1 | 17939 |
| 266 | 18 | 1 | 17941 |
| 252 | 18 | 1 | 17945 |
| 255 | 18 | 4 | 17936 |
| 267 | 18 | 4 | 17936 |
| 254 | 18 | 4 | 17939 |
| 254 | 18 | 4 | 17941 |
| 261 | 18 | 4 | 17939 |
| 261 | 18 | 4 | 17941 |
| 275 | 18 | 4 | 17939 |
| 275 | 18 | 4 | 17941 |
| 251 | 18 | 4 | 18091 |
| 274 | 18 | 4 | 18091 |
| 274 | 18 | 4 | 18093 |
| 257 | 18 | 4 | 18093 |
| 263 | 18 | 4 | 18093 |
| 268 | 18 | 4 | 18093 |
| 273 | 18 | 4 | 18093 |
| 262 | 18 | 8 | 17936 |
| 271 | 18 | 8 | 17939 |
| 271 | 18 | 8 | 17941 |
| 256 | 18 | 8 | 18091 |
而且请参见-不建议在任何地方都使用此选项-恰恰相反!请阅读一些关于改进您的问题的提示。以可用的形式添加DDL和示例数据,例如作为表变量声明和
insert
语句,使我们能够更轻松地帮助您。感谢您提供有关显示结果的提示。我已经修好了。对于诺洛克人来说,这不是我的决定。我知道有更好的方法来防止堆积,但我的团队领导希望我们这样做。这并没有使252 18 1 17945
成为要求的最后一行。我还没有测试过它,但看起来让t.ID
成为Order By
子句中的最后一个元素可以满足OP的要求。是的,就是它,非常感谢。