Могу ли я объединить значения из нескольких строк в другой таблице в несколько столбцов одной строки, используя SQL? - PullRequest
0 голосов
/ 24 декабря 2010

У меня есть две таблицы: T1:

| M_ID | P_ID1 | P_ID2 | rest of T1 columns |
|  0   |   0   |   1   |         ...        |
|  1   |   2   |   3   |         ...        |

Т2:

| P_ID | Type | A | B |
|  0   |   1  | a | e |
|  1   |   2  | b | f |
|  2   |   1  | c | g |
|  3   |   2  | d | h |

Теперь я хочу запрос, который выбирает это:

| M_ID | P_1a | P_1b | P_2a | P_2b | rest of T1 columns |
|  0   |  a   |  e   |  b   |  f   |         ...        |
|  1   |  c   |  g   |  c   |  h   |         ...        |

Итак, на словах: я хочу выбрать все столбцы из T1, но я хочу заменить P_ID1 столбцами из T2, где P_ID равен P_ID1, а тип равен 1, и в основном то же самое для P_ID2.

Очевидно, я могу получить необходимую информацию с помощью нескольких запросов, но мне было интересно, есть ли способ сделать это одним запросом. Есть идеи?

В настоящее время я использую SQL Server 2008r2, но мне также будут интересны решения для другого программного обеспечения для баз данных.

Спасибо за помощь!

Ответы [ 2 ]

1 голос
/ 24 декабря 2010

Это то же самое, что и решение @John Pickup, только с использованием современного синтаксиса соединения:

select T1.M_ID, t2_1.A as P_1a, t2_1.B as P_1b, t2_2.A as P_2a, t2_2.B as P_2b, ...
from T1
     join T2 t2_1 on T1.P_ID1 = t2_1.P_ID 
     join T2 t2_2 on T1.P_ID2 = t2_2.P_ID 

Я отправляю только отдельный ответ, так как в комментариях нет форматирования кода , как вам сообщили здесь

1 голос
/ 24 декабря 2010

Конечно, вам просто нужно использовать соединение:

select T1.M_ID, t2_1.A as P_1a, t2_1.B as P_1b, t2_2.A as P_2a, t2_2.B as P_2b, ...
from T1, T2 t2_1, T2 t2_2
where T1.P_ID1 = t2_1.P_ID and T1.P_ID2 = t2_2.P_ID 

В основном мы соединяем T1 с T2 дважды, один раз для значений P_1 и второй раз для значений P_2.Вам необходимо создать псевдоним T2, когда вы присоединяетесь к нему дважды, чтобы различать два (вот что такое t2_1 и t2_2 - средство различения двух экземпляров объединенного T2).

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