Пользовательская сортировка на SQL сервере - PullRequest
0 голосов
/ 18 июня 2020

Мне нужно отсортировать данные, и я хочу отсортировать данные на основе столбца «Доставка в страну».

Waybill #       Fob Code Order Type               Ship To Country
-----------------------------------------------------------------
PEN00070420     FCA POE  SGS-541                  DE    
SPM-SCRAP       FCA POE  SGS-541                  SG    
DIM027-055239   FCA POE  SGS-541                  SG    
DIM027-055085   FCA POE  SGS-541                  HK    
DIM027-054845   FCA POE  SGS-541                  HK    
F722954503      FCA POE  USO-821                  US    
ATKDGFHKG0163   FCA POE  SGS-541                  US    
PEN452450420    FCA POE  SGS-541                  DE

Мне нужен этот набор данных в качестве результата:

Waybill #       Fob Code Order Type               Ship To Country
-----------------------------------------------------------------
PEN00070420     FCA POE  SGS-541                  DE    
DIM027-055085   FCA POE  SGS-541                  HK    
SPM-SCRAP       FCA POE  SGS-541                  SG    
F722954503      FCA POE  USO-821                  US    
PEN452450420    FCA POE  SGS-541                  DE    
DIM027-054845   FCA POE  SGS-541                  HK    
DIM027-055239   FCA POE  SGS-541                  SG    
ATKDGFHKG0163   FCA POE  SGS-541                  US

Здесь DE, SG, HK, US повторяются, и это повторяется снова и снова. Как выполнить такую ​​сортировку на сервере SQL?

Ответы [ 2 ]

0 голосов
/ 18 июня 2020

Их нужно заказывать дважды.

  1. Один раз путем разделения по shipTocountry и Order по ShipToCountry. Теперь вы получаете рейтинг в разделах shipToCountry
  2. По результатам Шага no. 1, вы должны снова упорядочить их на основе ShipTocountry, чтобы перечислить страны ранга по порядку.
DECLARE @table table(waybill VARCHAR(30),Febcode VARCHAR(30),OrderType VARCHAR(30), ShipTocountry VARCHAR(30))

INSERT INTO @table values

('PEN00070420  ','FCA POE','SGS-541','DE'),    
('SPM-SCRAP    ','FCA POE','SGS-541','SG'),    
('DIM027-055239','FCA POE','SGS-541','SG'),    
('DIM027-055085','FCA POE','SGS-541','HK'),    
('DIM027-054845','FCA POE','SGS-541','HK'),    
('F722954503   ','FCA POE','USO-821','US'),    
('ATKDGFHKG0163','FCA POE','SGS-541','US'),    
('PEN452450420 ','FCA POE','SGS-541','DE');

SELECT Waybill, Febcode, OrderType, ShipTocountry
FROM
(
SELECT Waybill, Febcode, OrderType, ShipTocountry,
ROW_NUMBER() OVER  (PARTITION BY ShipToCountry ORDER BY shipToCountry) as rnk
from @table
) as t
order by rnk,ShipTocountry
+---------------+---------+-----------+---------------+
|    Waybill    | Febcode | OrderType | ShipTocountry |
+---------------+---------+-----------+---------------+
| PEN00070420   | FCA POE | SGS-541   | DE            |
| DIM027-055085 | FCA POE | SGS-541   | HK            |
| SPM-SCRAP     | FCA POE | SGS-541   | SG            |
| F722954503    | FCA POE | USO-821   | US            |
| PEN452450420  | FCA POE | SGS-541   | DE            |
| DIM027-054845 | FCA POE | SGS-541   | HK            |
| DIM027-055239 | FCA POE | SGS-541   | SG            |
| ATKDGFHKG0163 | FCA POE | SGS-541   | US            |
+---------------+---------+-----------+---------------+
0 голосов
/ 18 июня 2020

Вы можете использовать row_number():

order by row_number() over (partition by shipto order by waybill),
         shipto
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...