2013-08-16 34 views
0
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 

嗨,上面我的結果集的複雜查詢。直到這裏我能夠實現。排列跨行元素上的記錄

請先看看前2條記錄。第一排的物品1 = 2行的SRID.if物品1反之亦然和ITEM2的SRID的ITEM2是任何順序相同的,我需要從itand造成的任何一條記錄應該是

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 
+0

16222 line2 item1 = 16222 line1 item2但你顯示的結果隻影響line1 – zxc

回答

0

取決於其他人呢數據是這樣的,但這可能工作....

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;