Sql 删除跨行元素上的记录
您好,上面是我的复杂查询结果集。直到现在我才能实现 请看前两张唱片。第一行的item1=第二行的item2,对于SRID,反之亦然。如果SRID的item1和item2在任何顺序上都相同,则我需要它中的任何一条记录,并且结果应该是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
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;