Jam*_*mes 4 sql t-sql sql-server join common-table-expression
我有一个表,在同一表中同时具有问题ID和父问题ID:
QUES_ID | Ques_Txt | Parent_Ques_Id
--------+-----------+---------+---------------
97 | X | NULL
101 | Y | NULL
115 | Z | NULL
198 | A | 97
302 | B | 97
151 | C | 101
91 | D | 115
1110 | E | 115
1111 | F | 115
Run Code Online (Sandbox Code Playgroud)
现在,我想按以下顺序获取结果集:
QUES_ID | Ques_Txt | Parent_Ques_Id
--------+-----------+---------+---------------
97 | X | NULL
198 | A | 97
302 | B | 97
101 | Y | NULL
151 | C | 101
115 | Z | NULL
91 | D | 115
1110 | E | 115
1111 | F | 115
Run Code Online (Sandbox Code Playgroud)
在子问题的正上方列出了父问题,我已经研究了一个类似的查询,但是我发现的全部是如何使用左联接或CTE显示父子记录,而不是按照我在上面查找的顺序表。谁能帮忙,我还在学习。
您可以使用以下技巧来做到这一点coalesce:
select *
from t
order by coalesce(parent_ques_id, ques_id), parent_ques_id, ques_id
Run Code Online (Sandbox Code Playgroud)
排序逻辑为:
coalesce(parent_ques_id, ques_id)-为父母分配自己的ID(而不是null),以便与他的孩子进行排序parent_ques_id-默认情况下,空值在ASC顺序中的值之前排序(在SQL Server中)ques_id