2013-11-01 2 views
0

Извините, если этот вопрос уже ответил ранее. Я охотился, но не мог найти.Как присоединиться к двум таблицам на основе отсутствующих значений в одной таблице?

Проблема:

Я использую SQL Server 2012 и у меня есть две таблицы (TableA и TableB), как показано ниже

таблицы А

+-------+--------+ 
| ItemA | SeqNoA | 
+-------+--------+ 
| D  |  1 | 
| A  |  0 | 
| Z  |  0 | 
| B  |  4 | 
| A  |  0 | 
| K  |  6 | 
+-------+--------+ 

TableB

+-------+--------+ 
| ItemB | SeqNoB | 
+-------+--------+ 
| A  |  1 | 
| D  |  2 | 
| C  |  3 | 
| A  |  4 | 
| B  |  5 | 
| J  |  6 | 
+-------+--------+ 

TableA имеет недостающие (нулевые) значения в некоторых строках col SeqNo, тогда как те же значения присутствуют в столбце SeqNo от TableB. Мне нужно найти способ присоединиться к этим таблицам таким образом, чтобы в итоге я получил приведенные ниже значения. Это соединение может быть либо присоединиться запрос некоторых видов или, возможно, даже создание совершенно новой таблицы на основе этих двух таблицы

+-------+--------+-------+ 
| ItemA | SeqNoA | ItemB | 
+-------+--------+-------+ 
| D  |  1 | A  | 
| A  |  2 | D  | 
| Z  |  3 | C  | 
| B  |  4 | A  | 
| A  |  5 | B  | 
| K  |  6 | J  | 
+-------+--------+-------+ 
+0

Что такое соединение D в TableB с A в TableA? – Taemyr

+0

Столбец Seqno должен быть общим фактором между двумя таблицами, но из-за некоторого программного обеспечения goofup в этом столбце отсутствуют некоторые записи в TableA. –

+1

Если вы должны были менять строки 2 и 3 в TableA, ожидаете ли вы результат изменение итогового стола? Если да: тогда у вас есть настоящая проблема. Вообще говоря, порядок не сохраняется в базе данных, поэтому эти два случая неразличимы, поэтому не должны давать вам другого результата. Если нет: по каким критериям эти строки будут соответствовать тогда? – Cruncher

ответ

0
ON tableB.SeqNo = ISNULL(tableA.SeqNo,tableB.SeqNo) 
+0

Isnull не будет работать здесь, так как отсутствующие значения в столбце SeqNoA имеют значение 0 не null. – Deepshikha

+0

Правда, этот запрос не дает желаемых результатов. Спасибо за все усилия Григорьев –

1

Отсутствующие значения в столбце SeqNoA имеет значение 0. В случае, если вы не иметь первичный ключ в таблице вы можете написать запрос, как показано ниже, назначая каждой строки уникальный порядковый номер в TableA:

select TA.ItemA , TA.NewSeqNoA as SeqNoA , TB.ItemB 
from 
(
select ItemA, SeqNoA , ROW_NUMBER() over (order by (select 1)) as NewSeqNoA 
from tableA) TA 
join tableB TB on TA.NewSeqNoA = TB.SeqNoB 

, но если у вас есть первичный ключ в TABLEA, то вы можете изменить этот запрос что-то, как показано ниже для правильного номера строки:

select TA.ItemA , TA.NewSeqNoA as SeqNoA , TB.ItemB 
from 
(
select ItemA, SeqNoA , ROW_NUMBER() over (order by ('TableA PK')) as NewSeqNoA 
from tableA) TA 
join tableB TB on TA.NewSeqNoA = TB.SeqNoB 
Смежные вопросы