2012-09-13 9 views
6

Mam kolumny [datatype:varchar(50)] w bazie danych (SQL Server 2008) o wartości, jak pokazano poniżej:Uporządkuj Kule w bazie

1 
2 
1.1.11 
4.1 
5 
2.1 
1.1 
4 
1.2.1 
4.2.2 
4.3 
4.2 
4.3.1 
4.2.1 
11.2 
1.2.4 
4.4 

te są ponumerowane kule do moich zapisów muszę uporządkować je jako grupowanie wszystkich rekordów w sekwencji 1,1.1,1.1.1,2,3.1,4,10.1,11.1....

Proszę, pomóżcie mi w tym zakresie.

+0

Co z 'order by column_name'? – Leri

+2

Czy "ORDER BY CAST ("/"+ YourColumn +"/"AS HIERARCHYID)" rób to, czego potrzebujesz? –

+0

AFAIK wykonując polecenie 'order by' na kolumnie, posortuje je według rosnącej kolejności" legal ". Czy chcesz również połączyć wszystkie wartości w jeden ciąg znaków? – StuartLC

Odpowiedz

17
WITH T(YourColumn) AS 
(
SELECT '1' UNION ALL 
SELECT '2' UNION ALL 
SELECT '1.1.11' UNION ALL 
SELECT '4.1' UNION ALL 
SELECT '5' UNION ALL 
SELECT '2.1' UNION ALL 
SELECT '1.1' UNION ALL 
SELECT '4' UNION ALL 
SELECT '1.2.1' UNION ALL 
SELECT '4.2.2' UNION ALL 
SELECT '4.3' UNION ALL 
SELECT '4.2' UNION ALL 
SELECT '4.3.1' UNION ALL 
SELECT '4.2.1' UNION ALL 
SELECT '11.2' UNION ALL 
SELECT '1.2.4' UNION ALL 
SELECT '4.4' 
) 
SELECT * 
FROM T 
ORDER BY CAST('/' + YourColumn + '/' AS HIERARCHYID) 

Zwraca

YourColumn 
---------- 
1 
1.1 
1.1.11 
1.2.1 
1.2.4 
2 
2.1 
4 
4.1 
4.2 
4.2.1 
4.2.2 
4.3 
4.3.1 
4.4 
5 
11.2 

że to, co trzeba?

+0

Tak .. Dziękuję bardzo .. To jest to, czego potrzebuję .. bardzo, bardzo pomocny – Nag