SQL - 对递归关系的结果进行排序

时间:2016-04-21 08:47:25

标签: sql .net sql-server linq tsql

我有一个帐户用户的数据库表。有两种类型的帐户: -

  • 管理员帐户
  • 标准帐户

数据表有两个附加列,帐号和父帐号。每个记录都会被分配一个新的帐号,但如果一个帐户是标准帐户,则会为其分配一个父帐号。我可以通过“父帐号”字段为NULL来判断谁是管理员。

我想打印这些用户的列表,由管理员帐户和该管理员的任何子项订购,然后再转到下一个管理员帐户。我期待一份清单: -

  • 管理员(帐户1250,父NULL)
    • 标准帐户(帐户1255,父母1250)
    • 标准帐户(帐户1256,父母1250)
  • 管理员(帐户1375,父NULL)
    • 标准帐户(帐户1403,家长1375)

我做了一个SQL查询: -

SELECT *
 FROM [LWC].[dbo].[AspNetUsers]
  ORDER BY AccountNumber, ParentAccountNumber

但这没有正确排序,因为每个帐号都不同。我认为这会按照我的预期排序,如果AccountNumber对于多个记录是相同的,但事实并非如此。

有人可以建议我如何正确排序吗?

谢谢!

3 个答案:

答案 0 :(得分:1)

我想简单地说:

$user = Auth::user();

if($user->to_logout){
    Auth::logout();
    $user->update(['to_update' => 0]);

    return redirect('/');
}

会做你想做的事。

答案 1 :(得分:0)

由于这是一种递归关系,因此可以使用recursive cte,或者hierarchyId类型会更好/更好。

答案 2 :(得分:0)

尝试这样的事情:

select * from 
    (SELECT *,
        case 
            when Parent is null then cast((cast(Account as nvarchar) + '0') as int)
            else cast((cast(Parent as nvarchar) + '1') as int)
        end as OrderCol
    FROM [LWC].[dbo].[AspNetUsers])
order by OrderCol