Sql 删除跨行元素上的记录

Sql 删除跨行元素上的记录,sql,database,sql-server-2008,relational-database,Sql,Database,Sql Server 2008,Relational Database,您好,上面是我的复杂查询结果集。直到现在我才能实现 请看前两张唱片。第一行的item1=第二行的item2,对于SRID,反之亦然。如果SRID的item1和item2在任何顺序上都相同,则我需要它中的任何一条记录,并且结果应该是 SRID Interaction Flag Flag2 items1 items2 16222 abc B 4 1852311000001100 19836811000001100 16222

您好,上面是我的复杂查询结果集。直到现在我才能实现

请看前两张唱片。第一行的item1=第二行的item2,对于SRID,反之亦然。如果SRID的item1和item2在任何顺序上都相同,则我需要它中的任何一条记录,并且结果应该是

SRID    Interaction Flag    Flag2   items1                     items2
16222   abc B   4   1852311000001100    19836811000001100
16222   abc B   4   19836811000001100   1852311000001100
18599   abc B   4   1852311000001100    10368611000001100
18599   abc B   4   10368611000001100   1852311000001100
19518   abc A   2   1592311000001100    1852311000001100
19518   abc A   2   1852311000001100    1592311000001100
19518   abc A   2   1852311000001100    19836811000001100
19518   abc A   2   19836811000001100   1852311000001100

这取决于其他数据是什么样的,但这可能有效

 SRID    Interaction    Flag    Flag2   items1                     items2
    16222   abc B   4   1852311000001100    19836811000001100
    18599   abc B   4   1852311000001100    10368611000001100
    19518   abc A   2   1852311000001100    1592311000001100
    19518   abc A   2   1852311000001100    19836811000001100

16222 line2 item1=16222 line1 item2但显示的结果仅影响line1
WITH SourceData AS
(
    SELECT
     *
    FROM (  VALUES   (16222, 'abc', 'B', 4, 1852311000001100, 19836811000001100)
                    ,(16222, 'abc', 'B', 4, 19836811000001100, 1852311000001100)
                    ,(18599, 'abc', 'B', 4, 1852311000001100, 10368611000001100)
                    ,(18599, 'abc', 'B', 4, 10368611000001100, 1852311000001100)
                    ,(19518, 'abc', 'A', 2, 1592311000001100, 1852311000001100)
                    ,(19518, 'abc', 'A', 2, 1852311000001100, 1592311000001100)
                    ,(19518, 'abc', 'A', 2, 1852311000001100, 19836811000001100)
                    ,(19518, 'abc', 'A', 2, 19836811000001100, 1852311000001100)) tab(SRID, Interaction, Flag, Flag2, items1, items2)
)
,CTE AS
(
    SELECT DISTINCT
     s1.*
    FROM SourceData s1
    JOIN SourceData s2
    ON s1.SRID=s2.SRID
    AND s1.items1=s2.items2
)
,CTE2 AS
(
    SELECT
     *
    ,ROW_NUMBER() OVER(PARTITION BY SRID ORDER BY SRID)%2 AS RowID
    FROM CTE
)
SELECT
 SRID
,Interaction
,Flag
,Flag2
,items1
,items2
FROM CTE2
WHERE RowID=1;