如何确定表中的哪些行未按父表正确排序

时间:2011-02-16 19:21:50

标签: sql sql-server tsql

我有以下表结构:

table Parent (Id)

table Child (ParentId, SortOrder, Id, Data)

正常数据在Child表格中应如下所示:

ParentId    SortOrder   Id     Data
--------    ---------   ----   ----
   1            0        100   'Samuel'
   1            1        101   'Levi'
   1            2        102   'Isaac'
   2            0        103   'Emma'
   3            0        104   'Maddison'

不幸的是,有些东西已经损坏,使数据看起来像这样:

ParentId    SortOrder   Id     Data
--------    ---------   ----   ----
   1            2        100   'Samuel'
   1            4        101   'Levi'
   1            5        102   'Isaac'
   2            3        103   'Emma'
   3            0        104   'Maddison'

如何通过SQL识别通过基于零的SortOrder列未正确排序的子项的父母?

在上面的示例中,SQL查询会告诉我ParentId 1和2无效。

1 个答案:

答案 0 :(得分:3)

您可以将生成的Row_number与记录的排序顺序进行比较

select distinct ParentId
from 
(
select *, rn=ROW_NUMBER() over (partition by parentid order by sortorder) -1
from Child
) X
where rn <> Sortorder