sql server中的自定义排序

zour9fqk  于 2021-07-26  发布在  Java
关注(0)|答案(2)|浏览(345)

我要排序的数据,我想排序的数据根据船舶到国家列。

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 不断重复,不断重复。如何在SQLServer中执行这种排序?

dfty9e19

dfty9e191#

你可以用 row_number() :

order by row_number() over (partition by shipto order by waybill),
         shipto
gev0vcfq

gev0vcfq2#

你需要订两次。
一次按船国划分,一次按船国排序。现在,你在shiptocountry获得排名
在步骤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            |
+---------------+---------+-----------+---------------+

相关问题