2013-05-06 1 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 

Вопрос:

Зачем вам указывать rownum-1,2,3,4, когда мое условие соединения находится на tb1.rownum + 1? Не должно быть 2,3,4,5

ответ

0

Вы JOIN ING на ROWNUM + 1, но не SELECT ИНГ его ...

Изменение:

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

To:

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 и соответствовать таблице2.RowNum = 1

Кроме того, я не уверен в источнике import_num в вашем запросе, так как вы не показываете нам, что в вашей таблице определения. Это потенциальный источник путаницы в моем сознании.

+0

его правильно .. Я как-то смутился, ожидая значений tb1 + 1, выбирая tb1.start & tb1.end ... – user1050619

0

Попробуйте добавить 1 к rownum, а 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 
Смежные вопросы