Как объединить поля в Oracle? - PullRequest
       2

Как объединить поля в Oracle?

0 голосов
/ 27 сентября 2018

У меня есть эта простая таблица.

City            Country   State      Id
Great Falls      (null)   VA         12345
Great Falls      USA      VA         12345

Я хотел использовать функцию CONCAT для города + страны + штата с использованием приведенного ниже кода в среде Oracle.

SELECT City, Country, State, 
City ||', ' ||Country|| ', '||State AS Concat_fields
FROM #TEMP

City    Country    State       Concat_fields           Id
Great Falls (null) VA          Great Falls, , VA       12345
Great Falls USA    VA          Great Falls, USA, VA    12345

Вопрос: естьтам лучше, что запрос может быть изменен таким образом, чтобы он возвращал только 1 запись?Я хотел показать свой результат так:

City        Country State   Concat_fields           Id
Great Falls USA     VA       Great Falls, USA, VA   12345

Есть мысли, критика, предложения?

Ответы [ 2 ]

0 голосов
/ 27 сентября 2018

Если единственной разницей между строками являются нулевые и ненулевые значения, то перед объединением можно использовать агрегат:

-- CTE for sample data
with "#TEMP" (city, country, state, id) as (
  select 'Great Falls', null, 'VA', 12345 from dual
  union all select 'Great Falls', 'USA', 'VA', 12345 from dual
)
-- actual query
select max(city) as city, max(country) as country, max(state) as state, 
  max(city) ||', ' ||max(country)|| ', '||max(state) as concat_fields
from "#TEMP"
group by id;

CITY        COU ST CONCAT_FIELDS       
----------- --- -- --------------------
Great Falls USA VA Great Falls, USA, VA

Если строки для идентификатора имеют разные ненулевые значения,это, очевидно, не сработает:

with "#TEMP" (city, country, state, id) as (
  select 'Great Falls', null, 'VA', 12345 from dual
  union all select 'London', 'UK', null, 12345 from dual
)
select max(city) as city, max(country) as country, max(state) as state, 
  max(city) ||', ' ||max(country)|| ', '||max(state) as concat_fields
from "#TEMP";

CITY        CO ST CONCAT_FIELDS      
----------- -- -- -------------------
London      UK VA London, UK, VA     

, но тогда вам понадобится какой-то способ определить, какая строка является правильной - например, из столбца последовательности или даты, если это представляет историю адресов для клиента, и вы хотитеПоследняя версия.Хитрость заключается в том, чтобы узнать, что является «последним».

0 голосов
/ 27 сентября 2018
SELECT City, Country, State, 
City ||', ' ||Country|| ', '||State AS Concat_fields
FROM #TEMP
WHERE Country IS NOT NULL

Это будет работать для предоставленного набора данных.

В общем, хотя идентификаторы уникальны (первичный ключ), поэтому убедитесь, что вы строите свою таблицу так, чтобы она соответствовала более приемлемым методам работы с базами данных.

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