Это одно решение. Это грубая сила и использует объединение всех, чтобы принести получить несколько копий:
with incols as (
select (case when charindex(Dealid, ',') > 0
then left(DealId, charindex(Dealid, ',') - 1)
else DealId
end) as DealId1,
(case when charindex(Dealid, ',') > 0
then substring(DealId, charindex(DealId, ',') + 1, 100)
end) as DealId2,
(case when charindex(PAId, ',') > 0
then left(PAId, charindex(PAId, ',') - 1)
else PAId
end) as PAId1,
(case when charindex(PAId, ',') > 0
then substring(PAId, charindex(PAId, ',') + 1, 100)
end) as PAId2,
t.*
from t
),
deals as (
select (case when whichdeal = 1 then deal1 else deal2 end) as newdeal, t.*
from ((select *, 1 as whichdeal
from t
) union all
(select *, 2 as whichdeal
from t
where deal2 is not null
)) t
)
select newdeal as dealid, t.*
from deals
В том числе ООПТ требует добавления другого КТР, а затем присоединение сделок и ООПТ на dealid и ПА идентификатору, чтобы получить все возможные комбинации. Вы не указали точно, что хотите, когда в обеих строках есть дубликаты, поэтому я просто предполагаю, что вам нужны все комбинации.
Моя версия DB2 не имеет 'UNPIVOT', так что я бы написать рекурсивный запрос (не в состоянии в настоящее время), чтобы разделить это. Но этот макет ... пожалуйста, шпиндель, сверните и калечите оригинального дизайнера. –