我正在尝试以特定方式显示数据。现在我的数据看起来像-
ID | Name | NID
A1 test1 A201
B1 test2 null
C2 test3 null
A201 test1 null
但是我希望当NID
值与ID
匹配时,匹配的ID
值将显示在下一行,如下所示-
ID | Name | NID
A1 test1 A201
A201 test1 null
B1 test2 null
C2 test3 null
我当时正在考虑使用数组来执行此操作,但是没有用。我不确定如何实现这一目标。我在下面尝试过-
declare @newID table (s_newID nvarchar(max))
insert @newID (s_newID) select NID from Table1
select ID, Name, NID from Table1
order by
case
when NID IN (select s_newID from @newID) then 1 else 0
end
有人可以告诉我如何实现这一目标。
谢谢
答案 0 :(得分:2)
select t1.ID, t1.Name, t1.NID
from Table1 t1
left join Table1 t2
on t1.ID = t2.NID
order by
COALESCE(t2.ID,t1.ID),
CASE WHEN t1.NID is not null THEN 0 ELSE 1 END
如果我们被引用为LEFT JOIN
,则使用NID
来加入引用行。如果是这样,我们将 that 行的ID用作我们的主要排序条件,而不是我们自己的条件。对于次要排序,我们首先放置具有NID
值的项目(但根据我们的主要排序,其值等于另一行)。