我在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)。
答案 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