Доска объявлений с выбором ответов из базы данных SQL Server в правильном порядке - PullRequest
0 голосов
/ 21 мая 2018

У меня есть таблица доски объявлений в SQL Server, и мне нужно запрашивать записи на доске объявлений с ответами в определенном порядке.Новые записи на доске вверху, но новые ответы внизу каждой записи на доске.

Исходные данные в таблице:

ID  AnswerToID 
---------------
095 NULL 
096 NULL 
097 NULL 
098 095 
099 NULL 
100 099
101 099 
102 095 
103 NULL 
104 103

Мне нужен этот результат запроса:

ID  AnswerToID
-------------------------
103 NULL
104 103  - answer to 103
099 NULL
101 099  - answer to 99
100 099  - answer to 99
097 NULL
096 NULL
095 NULL
102 095  - answer to 95
098 095  - answer to 95

Есть ли простой запрос SQL для этого?

Результат запроса будет использоваться Entity Framework, поэтому, возможно, есть более простой способ (LINQ), чем чистый SQL.

Ответы [ 2 ]

0 голосов
/ 21 мая 2018

Для решения на чистом SQL вы можете сделать следующее (столбец ndx предназначен только для отображения и может быть удален из производственного экземпляра)

select * ,
 concat(isnull(AnswerID,ID),'.',(9999-isnull(ID,AnswerID))) as ndx
 from board
 order by concat(isnull(AnswerID,ID),'.',(9999-isnull(ID,AnswerID))) desc

, который выдает следующий результат

ID      AnswerID        content         ndx
103     (null)          (null)          103.9896
104     103             answer to 103   103.9895
099     (null)          (null)          099.9900
100     099             answer to 99    099.9899
101     099             answer to 99    099.9898
096     (null)          (null)          096.9903
095     (null)          (null)          095.9904
098     095             answer to 95    095.9901
102     095             answer to 95    095.9897
0 голосов
/ 21 мая 2018

Ваша последняя запись результата (096 NULL) кажется неуместной.Не будет ли после 097 NULL?

IAC, попробуйте что-то вроде этого:

BoardMessages
    .OrderByDescending(b => b.AnswerToId == null ? b.ID : b.AnswerToId)
    .ThenBy(b => b.AnswerToId == null ? 0 : b.AnswerToId);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...