通过计算子记录集查找重复的父行

本文关键字:查找 计算 记录 | 更新日期: 2023-09-27 18:10:45

我试图在表parent中找到行,谁的child记录使其成为父表中另一个记录的副本。因此,它类似于组by与count> 1,除了标准是基于子记录是否匹配。在下面的示例表关系图中,您将看到我有三个数据列,但我只想在比较中使用其中的两个。

表/列:

    • parentID
  • 孩子
    • fkParentID
    • field1
    • field2
    • field3(忽略)

我是开放使用MS SQL, c#或LINQ SQL

通过计算子记录集查找重复的父行

这是一个愚蠢的Northwind示例:

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