0

2つの列を持つテーブルがあります。

CurrentNumber | NewNumber
12345 | 12346
12346 | 12347
12347 | NULL
12349 | NULL
12350 | 12351
12351 | NULL

私ができるようにしたいのは、次のようにこのビューを平坦化することです。新しいテーブルを作成する

CurrentNumber | OldNumber
12347 | 12346
12347 | 12345
12351 | 12350

これが私の問題です。ネストされたカーソルを使用して、存在する可能性のある再帰の数を見つけることができますが、古い数を無限に見つける方法を思いつくことができませんでした。どんな助けでも大歓迎です。

この問題を解決するために、Sql Server 2008、2012、または MySql サーバーを利用できます。これを行う可能性のある外部アプリを作成することもできますが、これを定期的に行う必要があるため、可能であれば SQL に保持したいと考えています。

4

2 に答える 2

1

これを試して。SQL フィドル

CREATE TABLE t
    ([CurrentNumber] int, [NewNumber] int)
;

INSERT INTO t
    ([CurrentNumber], [NewNumber])
VALUES
    (12345, 12346),
    (12346, 12347),
    (12347, NULL),
    (12349, NULL),
    (12350, 12351),
    (12351, NULL)
;

;WITH cte AS (
  SELECT [CurrentNumber], CAST(NULL AS INT) AS OldNumber
  FROM t
  WHERE NewNumber IS NULL
  UNION ALL
  SELECT c.CurrentNumber, t.CurrentNumber AS OldNumber
  FROM t
  INNER JOIN cte c
      ON (ISNULL(c. OldNumber,c.CurrentNumber) = t.NewNumber)
)
SELECT * 
FROM cte
WHere OldNumber IS NOT NULL
ORDER BY 1,2    
于 2012-12-13T19:02:42.637 に答える
0

それはあなたが望むものですか?

;with cte as
            (
              select * 
              from table 
              where NewNumber is not null 
            ),
       cte2 as 
            (
               select NewNumber CurrentNumber, CurrentNumber OldNumber 
               from cte 
            )

 select * from cte2 order by CurrentNumber

必要に応じて、これらの結果をテーブルに挿入できます。

于 2012-12-13T18:30:36.737 に答える