Объединить строки в Oracle с нулями в разных столбцах - PullRequest
0 голосов
/ 10 января 2020

Мой запрос извлекает базовую совокупность из двух разных таблиц клиентов на основе демографических данных. Обе таблицы имеют многочисленные столбцы, такие как имя, идентификатор, город, штат и почтовый индекс. Таблица A содержит 2 столбца, которых нет в таблице B (state2 и state3). Таблица B содержит 1 столбец, которого нет в таблице B (страна).

Я использую объединение для объединения обеих базовых групп населения. Некоторые имена дублируются из каждой базовой популяции, но не все из них. Некоторые из них уникальны для каждой базовой популяции, так как они существуют в одной таблице, а не в другой. Объединение не удаляет дубликаты, которые существуют в обеих таблицах, поскольку они содержат информацию в уникальных столбцах таблицы A, но имеют значения NULL в уникальном столбце таблицы B, и наоборот. Мне нужно выяснить, как объединить их в один ряд, причем все 3 столбца показывают применимые данные. Пожалуйста, посмотрите пример выходных данных:

ID   Name   City     State   State2   State3   Zip   Country   Phone   Order Year   Order Status
111  Bob    Anytown  MP                       55555    US     555-5555  2020         Valid
111  Bob    Anytown  MP       MP       MP     55555           555-5555  2020         Valid 

Я хотел бы вернуть следующее:

ID   Name   City     State   State2   State3   Zip   Country   Phone   Order Year   Order Status
111  Bob    Anytown  MP       MP        MP    55555    US     555-5555  2020         Valid

Я пытался использовать не существует logi c, а также пытался присоединиться к объединенной базе на Сам с не нулевыми условиями, но не смог получить результаты, которые я ищу. Спасибо!

Ответы [ 2 ]

0 голосов
/ 11 января 2020

Если у вас проблема только с 3 columns, вы можете использовать group by и max/min для создания одной записи с ненулевыми данными, как показано ниже:

Select id, name, city, state,
       Max(state2) as state2,
       Max(state3) as state3,
       Zip,
       Max(country) as country,
       Phone,
       "Order Year",
       "Order Status"
  From (your_union_query)
Group by id, name, city, state,
       Zip, Phone, "Order Year", "Order Status"

Ура !!

0 голосов
/ 10 января 2020

Вам необходимо объединить отдельные столбцы, а затем захватить различные комбинации, как в:

SELECT DISTINCT d1.ID,
                COALESCE(d1.NAME, d2.NAME) AS NAME,
                COALESCE(d1.City, d2.City) AS City,
                COALESCE(d1.State, d2.State) AS State,
                COALESCE(d1.State2, d2.State2) AS State2,
                COALESCE(d1.State3, d2.State3) AS State3,
                COALESCE(d1.Zip, d2.Zip) AS Zip,
                COALESCE(d1.Country, d2.Country) AS Country,
                COALESCE(d1.Phone, d2.Phone) AS Phone,
                COALESCE(d1.Order_Year, d2.Order_Year) AS Order_Year,
                COALESCE(d1.Order_Status, d2.Order_Status) AS Order_Status
  FROM CUST_DATA d1
  LEFT OUTER JOIN CUST_DATA d2
    ON d2.ID = d1.ID AND
       d2.ROWID <> d1.ROWID

db <> скрипка здесь

...