Reputation:
I'm trying to order by PODID then CYID but sometimes a t.ID will have multiple PODIDs and/or CYIDs. All rows with the same t.ID should be together.
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
Expected result:
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
Edit: Sample was too small, here is the full result with Order By 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 |
+----------+---------+-------+-------+
All the PODID = 1 should be together first but if there's another PODID for the same t.ID they should be together.
If t.ID is at the end of the Order by it's still incorrect because the IDs are not together
+----------+---------+-------+-------+
| 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 |
+----------+---------+-------+-------+
Upvotes: 1
Views: 49
Reputation: 272096
If I understand correctly, you need to order the data like this:
ORDER BY
MIN(PODID) OVER (PARTITION BY TariffID),
MIN(CYID) OVER (PARTITION BY TariffID),
TariffID,
PODID,
CYID
This will put TariffID groups with smallest PODID and CYID first, then sort within each TariffID by individual PODID, CYID:
| 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 |
DB Fiddle for Short and Long Data
Upvotes: 1
Reputation: 391
Add the t.ID
in the ORDER BY
clause. Did you try this? Or am I seeing this differently?
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
Upvotes: 1