2016-04-21 2 views
0

У меня есть таблица учетных записей баз данных. Есть два типа счета: -SQL - упорядочение результатов рекурсивного отношения

  • учетная запись администратора
  • Стандартный счет

Таблица данных имеет два дополнительных столбца, номер счета и номер счета Родитель. Каждой записи независимо присваивается новый номер учетной записи, но если учетная запись является стандартной учетной записью, ей присваивается номер родительской учетной записи. Я могу указать, кто является администратором, из-за того, что поле «Номер родительского счета» имеет значение NULL.

Я хочу напечатать список этих пользователей, заказанный учетной записью администратора, а затем всех детей этого администратора, прежде чем перейти к следующей учетной записи администратора. Я ожидаю, что список: -

  • Administrator (счета 1250, Родитель NULL)
    • Стандартный счет (счета 1255, Родитель 1250)
    • Стандартный счета (счета 1256, Родитель 1250)
  • Администратор (счета 1375, родитель NULL)
    • Стандартный счет (счета 1403, родитель 1375)

Я сделал запрос SQL из: -

SELECT * 
FROM [LWC].[dbo].[AspNetUsers] 
    ORDER BY AccountNumber, ParentAccountNumber 

, но это не приказывать правильно, потому что каждый номер счета отличается. Я предполагаю, что это будет выглядеть так, как я ожидал, если AccountNumber был одинаковым для нескольких записей, но это не так.

Может ли кто-нибудь предложить, как я могу сортировать это правильно?

Спасибо!

+0

этот простой, как менеджер и его сотрудник problem.just предоставить образцы данных. – KumarHarsh

+2

Я думаю, что 'ORDER BY ISNULL (ParentAccountNumber, AccountNumber), ParentAccountNumber, AccountNumber' будет делать то, что вы хотите. – GarethD

+0

@GarethD спасибо, обработал удовольствие. Что делает бит ISNULL? Я никогда не видел этого в ORDERBY раньше? –

ответ

1

Я думаю, просто:

ORDER BY ISNULL(ParentAccountNumber, AccountNumber), ParentAccountNumber, AccountNumber 

будет делать то, что вы хотите.

0

попробовать что-то вроде этого:

select * from 
    (SELECT *, 
     case 
      when Parent is null then cast((cast(Account as nvarchar) + '0') as int) 
      else cast((cast(Parent as nvarchar) + '1') as int) 
     end as OrderCol 
    FROM [LWC].[dbo].[AspNetUsers]) 
order by OrderCol 
Смежные вопросы