2012-06-08 6 views
1

У меня есть семь таблиц (которые имеют уникальные строки, но некоторые из них одинаковы, но большинство наших уникальных для каждой таблицы). Я хочу создать одну таблицу/представление для всех семи таблиц, но отображать столбцы с одинаковыми именами в одном.SQL Server 2008 - Соединять 7 таблиц вместе

таблица1

custid, ref#, uniq1, uniq2, field3, fiel4 

таблица2

custid, ref#, uniq1, uniq2, field3, fiel4, field5, field6 

Таблица 3

custid, ref#, uniq1, uniq2, field5, field6, field7, field8 

Выход требуется

стол/вид

custid, ref#, uniq1, uniq2, field3, field4, field5, field6, field7, field8 

Там будет много нулевых значений, но это хорошо

Благодаря

+0

Что произойдет, если table1.uniq1, table2.uniq1 и table3.uniq1 все имеют значения? Что должно иметь приоритет? Или это будет конкатенация? –

+0

Совет. Если вы используете 'union' для объединения строк из нескольких таблиц, вам может быть удобно, особенно при отладке, добавить колонку literal, чтобы показать источник каждой строки:' select CustId, RefNo, 'Table1' as [Source ] from Table1 union все выбирают CustId, RefNo, 'Table2' union all ... ' – HABO

ответ

0

Вы хотите союз, а не присоединиться:

select x, y from table1 
union 
select x, y from table2 
... 
+0

, но в некоторых таблицах больше столбцов, чем у других, будет ли соединение все еще удерживаться. – user1445542

+0

Да, вам нужно иметь одинаковое количество элементов в элементе select, но вы можете просто выбрать null (или пустую строку/0), где таблица не имеет столбца: select custid, ref #, uniq1, null, uniq3 ... и т.д. –

4

Следует отметить, что предика Union ели будут уникальны по результатам. Таким образом, вы, вероятно, захотите использовать Union All, который не будет «уникальным» результатом. Кроме того, вам нужно будет добавить значение заполнителей (в данном случае, я использовал NULL) для столбцов, пропавших без вести, так что каждый Выбери оператор возвращает одинаковое число столбцов:

Select custid, ref#, uniq1, uniq2, field3, fiel4, NULL As field5 
    , NULL As field6, NULL As field7, NULL As field8 
Union All 
Select custid, ref#, uniq1, uniq2, field3, fiel4, field5, field6, NULL, NULL 
Union All 
Select custid, ref#, uniq1, uniq2, NULL, NULL, field5, field6, field7, field8 

Наконец, в Союзе или Объединить все запрос, имя столбца из первого запроса - это то, что используется для имен столбцов результата. Итак, в случае значений placeholder в первом запросе вам нужно будет добавить псевдонимы столбцов.

Смежные вопросы