Объединение строк с одинаковым идентификатором, но разными значениями столбцов в Oracle SQL - PullRequest
0 голосов
/ 04 апреля 2019

Я пытаюсь объединить строки в одну на основе идентификационного номера, который имеет разные значения столбца.В этом примере я создаю новые значения столбцов на основе операторов Case.Пожалуйста, смотрите мой код ниже и фактические результаты в сравнении с ожидаемыми.Любая помощь высоко ценится.

SELECT *

FROM (
SELECT CTR_NMBR, CODE, EXEC_ID,

CASE
  WHEN CODE = '2_EXEC_ZERO'
  THEN 2
  Else NULL
END AS Exclude_Zero,

CASE
  WHEN CODE = '3_EXEC_MAT'
  THEN 3
  Else NULL
END AS Exclude_Mat

FROM EXCLUDED)

WHERE COALESCE(Exclude_Zero, Exclude_Mat) IS NOT NULL;

Фактические результаты:

CTR_NMBR        CODE            EXEC_ID         Exclude_Zero        Exclude_Mat 
E0105753       2_EXEC_ZERO       565                2
E0105753       3_EXEC_MAT        565                                    3

Ожидаемые результаты:

CTR_NMBR        EXEC_ID         Exclude_Zero        Exclude_Mat
E0105753         565                2                    3

Ответы [ 3 ]

2 голосов
/ 04 апреля 2019

Я думаю, что вы хотите агрегации:

SELECT CTR_NMBR, EXEC_ID,
       MAX(CASE WHEN CODE = '2_EXEC_ZERO' THEN 2
           END) AS Exclude_Zero,
       MAX(CASE WHEN CODE = '3_EXEC_MAT' THEN 3
           END) AS Exclude_Mat
FROM EXCLUDED
GROUP BY CTR_NMBR, EXEC_ID;
1 голос
/ 04 апреля 2019

Вы можете использовать decode с aggregation, используя regex для динамического извлечения цифры из code столбца

with excluded(ctr_nmbr, code, exec_id ) as
(
 select 'E0105753', '2_EXEC_ZERO', 565 from dual union all
 select 'E0105753',  '3_EXEC_MAT', 565 from dual   
)
select ctr_nmbr, exec_id,
       max(decode(code,'2_EXEC_ZERO',regexp_substr(code,'[^_]+',1),null)) as Exclude_Zero,
       max(decode(code,'3_EXEC_MAT',regexp_substr(code,'[^_]+',1),null)) as Exclude_Mat           
  from excluded
 group by ctr_nmbr, exec_id;

Демо

1 голос
/ 04 апреля 2019

удалить code из выбора и выполнить условное агрегирование

SELECT CTR_NMBR, EXEC_ID,

 max(CASE
  WHEN CODE = '2_EXEC_ZERO'
  THEN 2 end)      
 AS Exclude_Zero,

 max( CASE
  WHEN CODE = '3_EXEC_MAT'
  THEN 3 end) AS Exclude_Mat

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