oracle - Oracle中如何连接字段?
问题描述
我有这张简单的桌子。
City Country State Id
Great Falls (null) VA 12345
Great Falls USA VA 12345
我想在 Oracle 环境中使用以下运行代码的城市 + 国家 + 州的 CONCAT 函数。
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
有什么想法、批评、建议吗?
解决方案
如果行之间的唯一区别是空值与非空值,那么您可以在连接之前使用聚合:
-- 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
如果 ID 的行具有不同的非空值,那么这显然不起作用:
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
但是随后您将需要某种方法来确定哪一行是正确的 - 例如,如果这代表客户地址的历史记录并且您想要“最新”版本,则从序列或日期列中确定。那么诀窍就是知道如何确定哪个是“最新的”。
推荐阅读
- php - 输出结果与 SUM 计数
- android - 如何在 Html.fromHtml 中显示链接(如果它们位于
元素?
- python-3.x - Selenium - 登录 Facebook 导致 Web 驱动程序无限期停止
- apache - nginx 反向代理 + apache 不会显示图像
- flutter - 如何从其他类更新 StatefulWidget?
- reactjs - 即使上下文选项正确显示,简单的图表也不显示条形图
- algorithm - 在地图中更新值的快速方法
- python - 如何从列表中删除元素但保留值`False`
- python - 尝试在烧瓶应用程序网站上显示本地图像
- java - Android Volley 返回空响应