2
CREATE TABLE T1 (C1 INT);
CREATE TABLE T2 (C1 INT, C2 INT);

INSERT INTO T1 VALUES (9), (10), (12), (13), (21), (53), (111);
INSERT INTO T2 VALUES (10, 3), (12, 6), (21, 9);

Desired values in T2
C1  C2
10  3
12  6
13  6 -- duplicate value from row C1=12
21  9
53  9 -- duplicate value from row C1=21
111 9 -- duplicate value from row C1=21

T1 にあるテーブル T2 に、列の値が C1 で並べ替えられた T2 の前の行から取得された列 C1 に一致する行をどのように挿入しますか?

以前の値がない場合、つまり C1=9 の場合、新しい行は挿入されません。

4

3 に答える 3

0

T2.C2が昇順であると仮定すると、ORDER BY句でMAX集計関数を使用できます

 ;WITH cte AS
 (
  SELECT T1.C1 AS t1C1, T2.C1 AS t2C1,
         MAX(T2.C2) OVER(ORDER BY T1.C1) AS C2
  FROM T1 LEFT JOIN T2 ON T1.C1 = T2.C1
  )
  SELECT t1C1 AS C1, C2
  FROM cte
  WHERE C2 IS NOT NULL AND t2C1 IS NULL

SQLFiddle のデモ

于 2013-05-23T21:15:58.783 に答える