Пользовательская сортировка на основе ссылочных записей - PullRequest
2 голосов
/ 17 апреля 2019

Пожалуйста, примите во внимание эти данные:

Id           F1          F2          Ref_ID
------------------------------------------- 
1            Nima        35           Null
2            Eli         33           Null
3            Arian       5            1
4            Ava         1            1
5            Arsha       3            2
6            Rozhan      30           1
7            Zhina       20           2

Я хочу отсортировать эту таблицу следующим образом:

Id           F1          F2          Ref_ID
------------------------------------------- 
1            Nima        35           Null
3            Arian       5            1
4            Ava         1            1    
6            Rozhan      30           1
2            Eli         33           Null
5            Arsha       3            2
7            Zhina       20           2

ссылки должны быть размещены под ссылочной записью на основе возрастающего идентификатора.

Как я могу сделать это, используя LINQ или SQL.Спасибо

Ответы [ 4 ]

3 голосов
/ 17 апреля 2019

В SQL вы можете отсортировать его, используя COALESCE или ISNULL для Ref_id и Id.

И IIF или CASE WHEN, чтобы убедиться, что родительский идентификатор стоит первымв той же группе Ref_id.

SELECT Id, F1, F2, Ref_ID
FROM YourTable
ORDER BY COALESCE(Ref_ID, Id), IIF(Ref_ID IS NULL, 0, 1), Id;

Тест на db <> fiddle здесь

1 голос
/ 17 апреля 2019

Используя LINQ, вы можете сделать это так:

from i in data
orderby i.Ref_ID ?? i.Id
select i;
1 голос
/ 17 апреля 2019

Вот более простое решение:

SELECT 
    Id,
    F1,
    F2,
    Ref_ID
FROM 
    @Table
ORDER BY 
    ISNULL(Ref_ID,ID), ID

Результат:

enter image description here

0 голосов
/ 17 апреля 2019

Другим решением является добавление дополнительного столбца в запрос и сортировка по этому столбцу

select t.*
from   ( select Id,
                F1,
                F2,
                Ref_ID,
                coalesce(Ref_ID, Id) as RefID_or_Id, 
                iif(Ref_ID is null, 0, 1) as Ref_ID_0_or_1
        from  YourTable
       ) t
order by t.RefID_or_Id,
         t.Ref_ID_0_or_1,   
         t.Id 

В случае, если у вас большой стол, вы должны протестировать, какое из решений здесь лучше для вас

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...