如何以这种特定的方式对sql结果进行排序?

如何以这种特定的方式对sql结果进行排序?,sql,sql-server,sql-order-by,Sql,Sql Server,Sql Order By,我有一个包含列(ID、ParentId、name等)的表。 parentId可以为空。我希望以这样的方式显示结果:首先显示父项,然后在下一行显示子项。我怎么能那样点菜?我正在使用Microsoft Sql Server 样本数据: ID cltName parentId ----------- -----------------------------------------------

我有一个包含列(ID、ParentId、name等)的表。 parentId可以为空。我希望以这样的方式显示结果:首先显示父项,然后在下一行显示子项。我怎么能那样点菜?我正在使用Microsoft Sql Server

样本数据:

ID          cltName                                            parentId   
----------- -------------------------------------------------- -----------
1           a                                                  NULL       
2           b                                                  NULL       
3           c                                                  NULL       
4           d                                                  NULL       
5           e                                                  NULL       
6           f                                                  NULL       
7           g                                                  6          
8           h                                                  NULL       
9           i                                                  3          
10          k                                                  NULL       
11          yyk                                                NULL       
12          krr                                                NULL       
13          krre                                               12         
预期结果如下:

    ID          cltName                                            parentId   
    ----------- -------------------------------------------------- -----------
    6           f                                                  NULL       
    7           g                                                  6       
    3           c                                                  NULL       
    9           i                                                  3 
    12          krr                                                NULL       
    13          krre                                               12          

您需要为要分组在一起的所有行创建一个具有相同值的列—这是parentid,如果没有父项,则是units own id。然后计算每个组中有多少行,并仅显示计数大于1的行。这将为您提供正确的数据。然后按groupingID、parentID进行排序

With TestData as 
(
    select 1 as ID,'a' as cltName,NULL as parentId
    union all select 2 ,'b',NULL
    union all select 3 ,'c',NULL
    union all select 4 ,'d',NULL
    union all select 5 ,'e',NULL
    union all select 6 ,'f',NULL
    union all select 7 ,'g',6
    union all select 8 ,'h',NULL
    union all select 9 ,'i',3
    union all select 10,'k',NULL
    union all select 11,'yyk',NULL
    union all select 12,'krr',NULL
    union all select 13,'krre',12
), WorkingData as (
    Select ID, cltName, parentId
    , case when parentId IS NULL then ID else parentId end as groupingID
    , COUNT (ID) OVER (PARTITION BY case when parentId IS NULL then ID else parentId end) as RowCt
    from TestData
)

Select ID, cltName, parentId
From WorkingData 
Where RowCt > 1
Order by groupingID, parentId

还要指定预期的结果。(让一切都很清楚。)使用哪种RDBMS?您可以使用GROUPBY和ORDERBY查询。这里有一些解释。那些没有任何父ID的呢??您正在使用什么RDBMS?您正在使用哪些RDBMS?“SQL”只是一种查询语言,而不是特定数据库产品的名称。请为您正在使用的数据库产品
postgresql
oracle
sqlserver
db2
。。。