Berikut tipnya:Setiap kali Anda mengalami masalah dengan pengurutan, tambahkan urutan berdasarkan item ke klausa pilihan Anda. ini akan memungkinkan Anda untuk melihat apakah yang Anda urutkan sebenarnya adalah yang ingin Anda urutkan:
SELECT Section,
CASE WHEN PATINDEX('%[0-9]%',Section) > 1 THEN
LEFT(Section,PATINDEX('%[0-9]%',Section)-1)
ELSE
Section
END As alphabetical_sort, -- alphabetical sort
CASE WHEN PATINDEX('%[0-9]%',Section) > 1 THEN
CAST(SUBSTRING(Section,PATINDEX('%[0-9]%',Section),LEN(Section)) as float)
ELSE
NULL
END As Numeric_Sort
FROM dbo.Section
ORDER BY alphabetical_sort, Numeric_Sort
Setelah saya mengurutkan dengan benar, Yang harus saya lakukan adalah memindahkan pernyataan kasus ke urutan demi klausa:
SELECT Section
FROM dbo.Section
ORDER BY
CASE WHEN PATINDEX('%[0-9]%',Section) > 1 THEN
LEFT(Section,PATINDEX('%[0-9]%',Section)-1)
ELSE
Section
END , -- Alphabetical sort
CASE WHEN PATINDEX('%[0-9]%',Section) > 1 THEN
CAST(SUBSTRING(Section,PATINDEX('%[0-9]%',Section),LEN(Section)) as float)
ELSE
NULL
END -- Numeric sort
Pada dasarnya, Anda memiliki 4 masalah utama:
- Ekspresi pengurutan abjad Anda mengasumsikan bahwa setiap baris memiliki angka di dalamnya.
- Ekspresi pengurutan abjad Anda berisi angka-angka serta teks.
- Ekspresi pengurutan numerik Anda memiliki nilai numerik dan alfabet.
- Karena artikel 3, Anda tidak dapat mentransmisikan ekspresi pengurutan numerik ke tipe numerik, dan inilah mengapa Anda akan mendapatkan pengurutan string.