我需要创建一个返回记录集的母公司笔记,每个父母列在下方他们的孩子的笔记,由父(根)注编号排序的查询。
例如,这里是我想看到的输出:
我使用接受的解决方案这一页 ,这是这样的:
SELECT ID, ParentID, Datestamp
FROM ForumMessages
ORDER BY coalesce(ParentID, ID), Datestamp
我得到的查询是:
SELECT NoteID, ParentNoteID, NoteText
FROM dms_Notes
WHERE DocketID = 43477 -- this filter is just to make the resultset smaller
ORDER BY Coalesce(NoteID, ParentNoteID), NoteText
这导致在下面的输出。 正如你所看到的,ID为23478的最后一个记录是不是父23471以下所列
我也尝试切换ORDER BY
周围ParentNoteID, NoteID
,但结果却是进一步关闭:
什么是错的,这是为什么不工作? 我试图准确地将它基于接受的解决方案,但它只是似乎并没有正常工作? 谢谢。
你可以尝试:
SELECT NoteID, ParentNoteID, NoteText
FROM dms_Notes
WHERE DocketID = 43477 -- this filter is just to make the resultset smaller
ORDER BY IIF(ParentNoteID <> 0, ParentNoteID, NoteID), NoteText
该COALESCE函数返回的第一个元素IS NOT NULL
,但使用的是0
,而不是NULL
来检查元素的父。
在StackOverflow上提供链接,用户使用NULL' to do this. Because of this you have to change the condition logic user in the
NULL' to do this. Because of this you have to change the condition logic user in the
ORDER BY`条款。
编辑:
作为marc_S
在他的评论中指出,如果不使用SQL Server 2012中,您可以用替换IIF语句CASE WHEN
块。
您没有相同的设置所引用的文章。 具体而言,您的parentId的有0时,没有父母,而不是空的。 所以,COALESCE将永远不会做任何事情。 所以,你需要这样的:
Order by case when parentid = 0 then noteid else parentid end