0

表1

START   END rownum
1   1   1
2   3   2
4   7   3
8   8   4
9   9   5

表-2

START   END rownum
1   1   1
2   3   2
4   7   3
8   8   4
9   9   5

クエリ:

SELECT TB1.START,TB1.[END],TB1.rownum as row_1,TB2.START,TB2.[END],TB2.rownum as row_2 FROM 
(
select START,[END],ROW_NUMBER() over(order by import_num) as rownum from 
table1 
) TB1
INNER JOIN
(
select START,[END],ROW_NUMBER() over(order by import_num) as rownum from 
table1 
) TB2
ON TB1.rownum + 1 = TB2.rownum 

結果:

START   END row_1   START   END row_2
1   1   1   2   3   2
2   3   2   4   7   3
4   7   3   8   8   4
8   8   4   9   9   5

質問:

結合条件が tb1.rownum + 1 であるときに、rownum が -1,2,3,4 を示すのはなぜですか? 2,3,4,5じゃないかな

4

3 に答える 3

1

あなたの出力は私には問題ないようです。これを表示する最良の方法はわかりませんが、何が何に結合しているかを視覚化する 1 つの方法を次に示します。

Table1.RowNum   +1      Table2.RowNum
1               2       2
2               3       3
3               4       4
4               5       5
5               6       null    /* no 6 in Table2.RowNum */
null            null    1       /* no 0 in Table1.RowNum */

ここの最後の 2 行で、Table2.RowNum に 6 がないことを確認してください。また、Table1.RowNum に 1 を追加して、Table2.RowNum = 1 と一致させることはできません。

import_numまた、テーブル定義でそれを示していないため、クエリのソースがわかりません。これは、私の心の混乱の潜在的な原因です。

于 2013-05-06T16:50:53.123 に答える
0

row_number のときに rownum に 1 を追加してみてください。これは 2,3,4,5 で結合します。

SELECT TB1.START,TB1.[END],TB1.rownum as row_1,TB2.START,TB2.[END],TB2.rownum as row_2 FROM 
(
select START,[END],ROW_NUMBER() over(order by import_num) + 1 as rownum from 
table1 
) TB1
INNER JOIN
(
select START,[END],ROW_NUMBER() over(order by import_num) as rownum from 
table1 
) TB2
ON TB1.rownum  = TB2.rownum 
于 2013-05-06T16:55:58.610 に答える
0

あなたはJOINrownum + 1を実行していますが、それを実行していませんSELECT...

変化する:

SELECT TB1.START,TB1.[END],TB1.rownum as row_1
    ,TB2.START,TB2.[END],TB2.rownum as row_2 FROM ....

に:

SELECT TB1.START,TB1.[END],(TB1.rownum + 1) as row_1
    ,TB2.START,TB2.[END],TB2.rownum as row_2 FROM ....
于 2013-05-06T17:03:14.520 に答える