-2

再帰 CTE を使用せずに、期待される結果を下回る方法を使用します。

DECLARE @temp TABLE 
(
      ParentCode VARCHAR (100)
    , ChildCode VARCHAR(100)
) 

INSERT INTO @temp
SELECT '101', '102' UNION ALL 
SELECT '102', '101' UNION ALL 
SELECT '103', '104' UNION ALL 
SELECT '104', '103' UNION ALL 
SELECT '105', '106' UNION ALL 
SELECT '106', '105'

SELECT * FROM @temp

出力:

ParentCode 
101
103
105
4

1 に答える 1

1

これを試してみてください -

クエリ:

DECLARE @temp TABLE 
(
      ParentCode VARCHAR (100)
    , ChildCode VARCHAR(100)
) 

INSERT INTO @temp
SELECT '101', '102' UNION ALL 
SELECT '102', '101' UNION ALL 
SELECT '103', '104' UNION ALL 
SELECT '104', '103' UNION ALL 
SELECT '105', '106' UNION ALL 
SELECT '106', '105'

;WITH cte AS 
(
    SELECT 
          ParentCode
        , ChildCode
        , rn = ROW_NUMBER() OVER (ORDER BY ParentCode, ChildCode)
    FROM @temp 
)    
SELECT t.ParentCode 
FROM cte t
WHERE EXISTS(
    SELECT 1 
    FROM cte t2 
    WHERE t.ParentCode = t2.ChildCode
        AND t.rn < t2.rn
)

出力:

ParentCode
----------
101
103
105
于 2013-06-10T07:15:23.817 に答える