Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Хирархично сортиране в sql сървър, когато идентификаторът на детето съдържа '.'

Опитайте така:

РЕДАКТИРАНЕ:Промених подхода, за да се справя и с нечислови стойности като '123abc'.

declare @ids table(idList varchar(100))
insert into @ids values
 ('1.1')
,('1.2')
,('2.8')
,('2.7')
,('6.5')
,('6.5.1')
,('6.5.15')
,('7.1')
,('8');

select idList,padded.OrderBy
from @ids as ids
cross apply(select cast('<r>' + replace(idList,'.','</r><r>') + '</r>' as xml)) as AsXml(val)
cross apply
(
    select right('                ' + rtrim(x.y.value('.','varchar(max)')),10) 
    from AsXml.val.nodes('/r') as x(y)
    for xml path('')
) as padded(OrderBy)
order by padded.OrderBy


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Изтриване на свързани редове в релация много към много

  2. CREATE VIEW трябва да е единственият оператор в пакета

  3. COUNT() срещу COUNT_BIG() в SQL Server:Каква е разликата?

  4. Как да симулирам DEADLOCK на SQL Server?

  5. Кръстосана заявка с динамични колони в SQL Server 2005 нагоре