消息板,答案从SQL Server数据库中选择正确的顺序

时间:2018-05-20 22:40:44

标签: sql sql-server entity-framework

我在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使用,因此可能有比纯SQL更简单的方法(LINQ)。

2 个答案:

答案 0 :(得分:1)

您的上一个结果条目(096 NULL)似乎不合适。不是在097 NULL之后呢?

IAC,尝试这样的事情:

BoardMessages
    .OrderByDescending(b => b.AnswerToId == null ? b.ID : b.AnswerToId)
    .ThenBy(b => b.AnswerToId == null ? 0 : b.AnswerToId);

答案 1 :(得分:0)

对于纯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