根据另一个表中的重复项合并一个表中的行

时间:2016-08-26 19:24:21

标签: sql-server

我有一个表格db.collection('coll').aggregate([{ $project: { _id: 0, Name: '$_id', count: 1 } }, { $group: {_id : '$Name', count : { $sum: 1 } } }]).toArray(...) 可能看起来像这样,其中可能有2个字段table1Cnumber上的重复项,然后是唯一的Dob

pkSID

pkSID Cnumber Dob 1 12345 01/02/2002 2 12345 01/02/2002 3 12345 01/02/2002 4 12345 01/02/2002 5 12345 01/02/2002 中可能会多次出现此情况。然后我有另一个引用table1的表,我想合并这些行,以便它们只引用pkSID中的pkSID之一,所以table1看起来像最初这个:

table2

然后在合并之后:

pkSTID    fkSID    OtherVal1    OtherVal2
1         1        s            x
2         2        t            f
3         3        a            d
4         4        v            g
5         5        b            z

如何在pkSTID fkSID OtherVal1 OtherVal2 1 1 s x 2 1 t f 3 1 a d 4 1 v g 5 1 b z 中找到这些行,然后合并到table1

1 个答案:

答案 0 :(得分:0)

试试这个:
注意:我认为pkSID是相对Cnumber和Dob的延续

CREATE TABLE #TABLE1(pkSID INT,Cnumber INT,Dob  DATE)

INSERT INTO #TABLE1
SELECT 1, 12345, '01/02/2002' UNION ALL 
SELECT 2, 12345, '01/02/2002' UNION ALL 
SELECT 3, 12345, '01/02/2002' UNION ALL 
SELECT 4, 12345, '01/02/2002' UNION ALL 
SELECT 5, 12345, '01/02/2002'

CREATE TABLE #TABLE2(pkSTID INT,fkSID INT,OtherVal1  VARCHAR(10),OtherVal2 VARCHAR(10))

INSERT INTO #TABLE2
SELECT 1, 1, 's', 'x' UNION ALL
SELECT 2, 2, 't', 'f' UNION ALL
SELECT 3, 3, 'a', 'd' UNION ALL
SELECT 4, 4, 'v', 'g' UNION ALL
SELECT 5, 5, 'b', 'z'


SELECT  T2.pkSTID, T3.min_pkSID fkSID, T2.OtherVal1 , T2.OtherVal2 
FROM #TABLE2 T2
INNER JOIN 
(
    SELECT  MIN(T1.pkSID) min_pkSID, MAX(T1.pkSID) max_pkSID FROM #TABLE1 T1 GROUP BY T1.Cnumber, T1.Dob --T1 ON T2.fkSID = T1.pkSID
)T3 
ON T2.fkSID BETWEEN T3.min_pkSID AND T3.max_pkSID