2013-05-06 92 views
0

表-1SQL Server的INNER JOIN 2個相同的表

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

回答

0

你是荷蘭國際集團在ROWNUM + 1 JOIN,但不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 .... 
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 */ 

在這裏的最後兩行,怎麼看存在Table2.RowNum 6號?此外,您不能將1添加到任何Table1.RowNum並匹配Table2.RowNum = 1

此外,我不確定您的查詢中的import_num的來源,因爲您沒有向我們顯示在您的表中定義。這是我腦海中混亂的潛在根源。

+0

其正確..在選擇tb1.start&tb1.end時,我在某種程度上感到困惑,期待tb1 + 1的值... THanks – user1050619 2013-05-06 17:02:40

0

試試這個添加1到rownum while row_number,這將加入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