2011-02-16 35 views
1

我有以下表結構:如何確定適合該表中的行不正確的父表排序

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是無效的。

+0

你有一個「正確」的數據源,你可以進行比較? – 2011-02-16 19:26:06

+0

sql server版本2005+? – RichardTheKiwi 2011-02-16 19:28:40

回答

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