2013-04-24 4 views
0

Я пытаюсь найти строки в таблице parent, которые являются child записей, которые делают его дубликатом другой записи в родительской таблице. Таким образом, он похож на группу с помощью count> 1, за исключением того, что критерии основаны на совпадении дочерних записей. В приведенной ниже таблице диаграмм ниже показано, что у меня есть три столбца данных, но только два из них я хочу использовать в сравнении.Найти повторяющиеся родительские строки, оценив набор дочерних записей

Таблицы/Колонки:

  • Родительские
    • ParentID
  • Детьми
    • fkParentID
    • field1
    • field2
    • field3 (игнорируется)

Я открыт к использованию MS SQL, C# или LINQ к SQL

+1

Вы хотите увидеть, где 100% -ное перекрытие для всех детей, или только там, где такой же отдельный ребенок существует с двумя родителями? – JNK

+0

@JNK - При перекрытии 100%. – Peter

+0

Я начал работать над решением для этого, но он немного вырос, и у меня нет времени его увидеть. Моя рекомендация состояла бы в том, чтобы сделать CTE, в котором перечислены все дети, которые являются обманами других детей, а затем найдите любых родительских идентификаторов, у которых нет детей в этой подгруппе дублированных детей. – JNK

ответ

0

Вот глупый Борей Пример:

Select 
ods.OrderID 
, derived1.Quantity 
, derived1.Discount 
, derived1.SETKey 
, TotalsItemsInThisSet = derived1.MYC 
, ThisSetCardinal = ROW_NUMBER() OVER(PARTITION BY derived1.Quantity, derived1.Discount ORDER BY derived1.Quantity, derived1.Discount) 
from 
    dbo.[Order Details] ods 
    join 
    (select Quantity, Discount , COUNT(*) as MYC , ROW_NUMBER() OVER (Order by Quantity, Discount) AS SETKey from dbo.[Order Details] where Quantity > 50 and Discount > 0 GROUP BY Quantity, Discount Having Count(*) > 1) derived1 
    on ods.Quantity = derived1.Quantity and ods.Discount = derived1.Discount 
order by 
    derived1.Quantity, derived1.Discount 

Результаты:

OrderID  Quantity Discount  SETKey    TotalsItemsInThisSet ThisSetCardinal 
----------- -------- ------------- -------------------- -------------------- -------------------- 
10361  55  0.1   1     2     1 
10451  55  0.1   1     2     2 
10269  60  0.05   2     9     1 
10273  60  0.05   2     9     2 
10419  60  0.05   2     9     3 
10492  60  0.05   2     9     4 
10570  60  0.05   2     9     5 
10590  60  0.05   2     9     6 
10637  60  0.05   2     9     7 
10865  60  0.05   2     9     8 
11012  60  0.05   2     9     9 
10390  60  0.1   3     4     1 
10485  60  0.1   3     4     2 
10688  60  0.1   3     4     3 
10845  60  0.1   3     4     4 
10475  60  0.15   4     4     1 
10693  60  0.15   4     4     2 
10817  60  0.15   4     4     3 
10990  60  0.15   4     4     4 
10424  60  0.2   5     4     1 
10567  60  0.2   5     4     2 
10700  60  0.2   5     4     3 
10847  60  0.2   5     4     4 
10263  60  0.25   6     7     1 
10263  60  0.25   6     7     2 
10461  60  0.25   6     7     3 
10802  60  0.25   6     7     4 
10912  60  0.25   6     7     5 
10918  60  0.25   6     7     6 
11030  60  0.25   6     7     7 
10854  65  0.15   7     2     1 
10990  65  0.15   7     2     2 
10339  70  0.05   8     6     1 
10359  70  0.05   8     6     2 
10605  70  0.05   8     6     3 
10658  70  0.05   8     6     4 
10658  70  0.05   8     6     5 
11008  70  0.05   8     6     6 
10395  70  0.1   9     3     1 
10845  70  0.1   9     3     2 
11033  70  0.1   9     3     3 
10267  70  0.15   10     4     1 
10324  70  0.15   10     4     2 
10403  70  0.15   10     4     3 
10543  70  0.15   10     4     4 
10430  70  0.2   11     2     1 
10773  70  0.2   11     2     2 
10344  70  0.25   12     3     1 
10372  70  0.25   12     3     2 
10393  70  0.25   12     3     3 
10359  80  0.05   13     3     1 
10472  80  0.05   13     3     2 
10865  80  0.05   13     3     3 
10516  80  0.1   14     2     1 
10765  80  0.1   14     2     2 
10324  80  0.15   15     2     1 
10633  80  0.15   15     2     2 
10373  80  0.2   16     2     1 
10847  80  0.2   16     2     2 
10515  84  0.15   17     2     1 
10983  84  0.15   17     2     2 
10549  100  0.15   18     2     1 
10854  100  0.15   18     2     2 
11030  100  0.25   19     2     1 
11030  100  0.25   19     2     2 
10776  120  0.05   20     2     1 
10894  120  0.05   20     2     2 
10398  120  0.1   21     2     1 
10451  120  0.1   21     2     2 
+0

В принципе, для каждого дубликата «детской таблицы» (на основе скидки на количество) вы возвращаете всех родителей. «SetKey» - это то же значение для всего, что соответствует одному и тому же (скидка количества). «ThisSetCardinal» дает вам кардинальное число ~ внутри ~ каждого набора. – granadaCoder

+0

глупый не означает, что он не является полностью функциональным. : O – granadaCoder

+0

Это неплохое начало. Если бы я хотел передать петлю через записи, это, по крайней мере, скажет мне, какие другие родительские записи мне нужно проверить. – Peter

Смежные вопросы