SQLServer объединяет две таблицы - PullRequest
0 голосов
/ 14 октября 2010

У меня к вам вопрос, мне трудно пытаться объединить две таблицы, мне не удается найти правильный запрос.

У меня есть две таблицы: T1: 1 колонка, имеет X записей T2: 1 колонка, имеет Y записей Примечание: Y никогда не может быть больше, чем X, но часто меньше, чем этот

Я хочу объединить эти таблицы, чтобы получить таблицу с двумя столбцами t3: ColumnFromT1, columnFromT2.

Когда Y меньше X, значения поля T2 повторяются и распространяются на все мои другие значения, но я хочу получить NULL, когда используются ВСЕ столбцы из T2.

Как я мог этого достичь? Спасибо

Ответы [ 2 ]

2 голосов
/ 14 октября 2010

Вы можете дать каждой таблице номер строки в подзапросе.Тогда вы можете оставить присоединиться к этому номеру строки.Чтобы переработать строки из второй таблицы, возьмите модуль % номера строки первой таблицы.

Пример:

select  Sub1.col1
,       Sub2.col1
from    (
        select  row_number() over (order by col1) as rn
        ,       *
        from    @T1
        ) Sub1
left join
        (
        select  row_number() over (order by col1) as rn
        ,       *
        from    @T2
        ) Sub2
on      (Sub1.rn - 1) % (select count(*) from @T2) + 1 = Sub2.rn

Тестовые данные:

declare @t1 table (col1 int)
declare @t2 table (col1 datetime)

insert @t1 values (1), (2), (3), (4), (5)
insert @t2 values ('2010-01-01'), ('2012-02-02')

Это печатает:

1        2010-01-01
2        2012-02-02
3        2010-01-01
4        2012-02-02
5        2010-01-01
1 голос
/ 14 октября 2010

Вы ищете левое соединение (http://www.w3schools.com/sql/sql_join_left.asp) например. T1 левое соединение T2

говорят, что у них обоих общий столбец CustomerID

SELECT * 
  FROM T1
        LEFT JOIN
       T2 on t1.CustomerId = T2.CustomerId

Это вернет все записи в T1 и те, которые совпадают в T2 с нулями для значений T2, где они не совпадают.

Убедитесь, что вы объединяете таблицы в общем столбце (или в наборе общих столбцов, если для выполнения объединения требуется более одного столбца). Если нет, вы делаете декартово соединение (http://ezinearticles.com/?What-is-a-Cartesian-Join?&id=3560672)

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