Articles

SqlSkull

hur man implementerar anpassad sortering med SQL ORDER BY-klausul ?

ibland har vi ett krav på att sortera resultatuppsättningen som returneras av select-satsen i en anpassad ordning , som att visa några speciella kolumnvärden högst upp i resultatuppsättningen, medan återstående kan vara i standard sorteringsordning.

det blir utmaning eftersom vi vet att Order by-klausulen sorterar resultatuppsättningen antingen stigande eller fallande ordning baserat på givna kolumnlistor I Select-satsen och det tillåter inte att ange sorteringsordningen för några specifika värden på kolumnen.

Låt oss försöka förstå det med ett exempel, här har du ett exempel på tabellregion som anges nedan.

CREATE TABLE Region (RegionId INT, Region VARCHAR(10))INSERT INTO Region (RegionID, RegionName)VALUES (1 , 'EASTERN'), (2, 'WESTERN'), (3, 'NORTHEN'), (4, 'SOUTHERN')

nu är vårt krav att visa RegionName – ’NORTHEN’ alltid på toppen av sorteringsresultatet oavsett vilken sorteringsordning som används i select-satsen .

innan vi implementerar den anpassade sorteringsfrågan för detta, kan vi kontrollera kan vi uppnå detta bara genom att sortera ett frågeresultat antingen i stigande eller fallande ordning baserat på RegionName.

SELECT * FROM Region ORDER BY RegionName ASC

som du kan se är still Eastern på toppen i resultatuppsättning som betyder att vi kan få ’Northen’ på toppen bara genom att tillämpa sorteringsordning som stigande på RegionName.

kan nu kontrollera genom att sortera resultatet baserat på RegionName i fallande ordning.

SELECT * FROM Region ORDER BY RegionName ASC

du kan se, att sortera resultatet baserat på RegionName i fallande ordning fungerar inte heller, det betyder att du måste implementera anpassad sortering för att uppnå detta.

låter genomföra anpassade sortering för att visa ’Northen’ alltid på toppen, och återstående RegionName kommer att sorteras i stigande ordning.

för att implementera detta måste du använda order by-klausul med SQL case-uttalande enligt nedan.

SELECT * FROM Region ORDER BY CASEWHEN RegionName ='NORTHEN' THEN '1' ELSE RegionName END

som du kan se returnerar den nu ’Norra’ på toppen av resultatuppsättningen som är vad du vill se i resultatuppsättning och andra värden följer standardsorteringsordningen som är i stigande ordning.

vad händer när du använder sorteringsordningen som fallande I select-satsen ?

som vi redan har sett, sorterar resultatet i fallande ordning får vi ’Western’ på toppen av resultatuppsättningen.

så för att få ’Northern’ på toppen i resultatuppsättning medan andra RegionName sorteras i fallande ordning, kommer vi att implementera den anpassade sorteringen som followng.

SELECT * FROM Region ORDER BY CASE WHEN RegionName ='NORTHEN' THEN 'zzzzzzzz' ELSE RegionName END DESC

nu kan du se, Northen är på toppen av resultatuppsättningen, medan andra regionname sorteras i fallande oreder.

Låt oss förstå ovanstående uttalande, case-uttalandet specificerat i ordning av caluse ersätt Regionnamnvärdet ’Northern’ med ’zzzzzzzz’, eftersom den här gången vill du visa resultatet i fallande ordning men också vill visa Northern’ at på toppen så ersatte ’Northen’ med tecknet ’zzzzzzzz’. Som tecken ’ Z ’ är alltid det sista ordet i ordboken, och order by klausul sorterar data i ordboken ordning därför uttalande returnerar ’Norra’ alltid först becuase vi har ersatt ’Northen’ värde till ’zzzzzzzz’ i fall uttalande, medan återstående värden sorteras enligt standard sorteringsordning.

här kan du också ange det enda tecknet ’Z’ endast när du är säker på att alla värden för RegionName kolumnen inte har värden som börjar med bokstaven ’Z’.

om så är fallet, då för att undvika missanpassning i sorteringsordning, kan du klokt ange eventuella ersättnings tecken för ditt värde som du vill hålla alltid på toppen i sorteringsordning.

Lämna ett svar

Din e-postadress kommer inte publiceras.