Соединить два столбца из двух разных таблиц - PullRequest
3 голосов
/ 18 апреля 2011

У меня проблема с соединением двух столбцов из двух разных таблиц.

Сценарий таков: у меня есть таблица A с 11 столбцами и еще одна таблица B с 6 столбцами.

Тамэто имена столбцов SAMPLE1, которые существуют в обеих таблицах. Но SAMPLE2 из 1-й таблицы A и ABC из 2-й таблицы B имеют одинаковое значение, но с разными именами столбцов.То же самое с SAMPLE3 и DEF.Теперь я хотел бы объединить эти столбцы в один столбец (который состоит из данных обеих таблиц), и остальные столбцы также должны появиться в этой окончательной таблице.

Пример:

Таблица A

SAMPLE1    SAMPLE2    SAMPLE3 .........SAMPLE 11 (Total 11 columns in this table)

 US          75.2       US1_US           NULL

 INDIA       71         I3_INDIA         NULL

 UK          1851.23    UK1_UK           NULL

Таблица B

SAMPLE1      ABC         DEF............. XYZ (Total 6 columns in this table)

CHINA        123.2       C1_CHINA         2

JAPAN        1.1         J1_JAPAN         2

GERMANY      10.2314     G1_GERMANY       2

SINGAPORE    100.22      S1_SINGAPORE     2

Теперь я хотел бы видеть вывод следующим образом:

SomeTable

SAMPLE1      SOMENAME1    SOMENAME2..SAPMLE 11   ABC    DEF .....  SOMENAME3   

   US         75.2        US1_US      NULL       NULL    NULL      NULL

   INDIA      71          I3_INDIA    NULL       NULL    NULL      NULL 

   UK         1851.23     UK1_UK      NULL       NULL    NULL      NULL 

   CHINA      123.2       C1_CHINA    NULL       NULL    NULL       2   

   JAPAN      1.1         J1_JAPAN    NULL       NULL    NULL       2 

   GERMANY    10.2314     G1_GERMANY  NULL       NULL    NULL       2   

   SINGAPORE  100.22     S1_SINGAPORE NULL       NULL    NULL       2 

Короче:

ВЫБРАТЬ (ОБРАЗЕЦ 1 (ИЗ ТАБЛИЦЫ A) + ОБРАЗЕЦ1 (ИЗ ТАБЛИЦЫ B)) КАК ОБРАЗЕЦ1, (ОБРАЗЕЦ 2 + АВС) КАКSOMENAME1, (SAMPLE3 + DEF) AS SOMENAME2, A.SAMPLE4, A.SAMPLE5, ..., B.GHI, B.JKL, ... (A.SAMPLE11 + B.XYZ) AS SOMENAME3

Я использовал union, но он не работал.

select SAMPLE1,SAMPLE2,SAMPLE3,...,SAMPLE 11 from TABLE A
UNION 
SELECT SAMPLE1, ABC, DEF, ...., XYZ FROM TABLE B

Теперь я получаю сообщение об ошибке:

Msg 205, Уровень 16, Состояние 1, Строка 1

Все запросы, объединенные с использованием оператора UNION, INTERSECT или EXCEPT, должны иметь одинаковое количество выражений в своих целевых списках.

Я использовал union, coalesce, full externalприсоединиться (все предложения или ответs ниже)

Пожалуйста, помогите мне в написании кода.На самом деле этот код мне нужно использовать в утверждении выбора.Можно также использовать временные таблицы или описания дел и т. Д.

Спасибо, Шашра

Ответы [ 3 ]

2 голосов
/ 19 апреля 2011

Соедините две таблицы, используя FULL OUTER (сохраните данные из любой таблицы, где их нет в другой), затем используйте COALESCE, чтобы получить общий столбец SAMPLE1 из любой таблицы, в которой он есть.

SELECT COALESCE(A.SAMPLE1, B.SAMPLE1) SAMPLE1,
     A.SAMPLE2,
     A.SAMPLE3,
     ...
     A.SAMPLE11,
     B.ABC,
     B.DEF,
     ...
     B.XYZ
FROM table1 A FULL OUTER JOIN table2 B on A.SAMPLE1 = B.SAMPLE1

Список литературы: MSDN - Использование внешних соединений / COALESCE

2 голосов
/ 18 апреля 2011

Вы, вероятно, ищете join, например:

select  a.sample1
,       a.sample2
,       b.abc
,       b.def
...  etc  ...
from    TableA as a
full outer join
        TableB as b
where   a.sample1 = b.sample1
0 голосов
/ 19 апреля 2011

ПОПРОБУЙТЕ ЭТО МОЖЕТ ПОЛЕЗИТЬ

Таблица 1 содержит 5 столбцов

выберите col1, col2 ... col5 из таблицы1

Таблица 2 содержит 3 столбца

выберите col1, col2, col3 из таблицы1

Запрос

выберите col1, col2, col3, col4, col5 из таблицы1 союз выберите col1, col2, col3, '', '' из таблицы1

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...