值与SQL Server匹配时的数据显示顺序

时间:2018-08-30 14:37:17

标签: sql-server

我正在尝试以特定方式显示数据。现在我的数据看起来像-

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

有人可以告诉我如何实现这一目标。

谢谢

1 个答案:

答案 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值的项目(但根据我们的主要排序,其值等于另一行)。