Присоединиться к той же таблице в DB2 - PullRequest
0 голосов
/ 23 февраля 2012

У меня есть таблица типа

col1 col2 col3
abc  123  A
abc  345  B
def  567  A
ghi  890  B

Я хочу, чтобы данные в одной строке были связаны с элементом.Col3 является элементом дискриминатора.Только строки «A» и «B» связаны между собой.Результат должен выглядеть так:

col1 col2A col2B
abc  123   345
def  567   --
ghi  --    890

Как я могу это сделать?

Ответы [ 2 ]

1 голос
/ 23 февраля 2012

Эта конструкция работает в SQL Server. У меня нет экземпляра DB2, пригодного для проверки того, что он там тоже работает, но синтаксис достаточно стандартный.

SELECT t0.col1, t1.col2 AS col2A, t2.col2 AS col2B
FROM (SELECT DISTINCT col1 FROM mytable) as t0 -- Select the list of keys
LEFT OUTER JOIN mytable t1 ON t0.col1=t1.col1 AND t1.col3='A' -- Join for col2A
LEFT OUTER JOIN mytable t2 ON t0.col1=t2.col1 AND t2.col3='B' -- Join for col2B
1 голос
/ 23 февраля 2012

Это может быть не так, чтобы использовать самостоятельное соединение. Это будет работать для данных, которые вы разместили:

select 
    col1,
    max(case col3 when 'A' then col2 else null end) col2A,
    max(case col3 when 'B' then col2 else null end) col2B
from YourTable
group by col1

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

col1 col2 col3
abc  123  A
abc  345  B
abc  567  A

Опять же, не только запрос потерпит неудачу, но и все ваше бизнес-правило не будет работать, если у вас есть такие данные.

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