首页 > 解决方案 > 如何根据相似的 id 将同一列中的值组合到一个新列中

问题描述

所以现在,我有一个表 baseoil,其中包括一个描述列、一个从描述列解析数据的子字符串列和一个 ID 列。我想根据行的 ID 将子字符串中的解析值组合到一个新列中,同时保留没有重复 ID 的数据。例如:

Description          |Substring  |ID     |
---------------------|-----------|-------|                     
100 GALLONS OF SN5484|100 GALLONS|8330780|
---------------------|-----------|-------|
100 GALLONS OF SN5484|SN5484     |8330780|
---------------------|-----------|-------|
25 LITERS OF TY50000 |TY50000    |7545215|

我希望新行看起来像这样:

Description          |Substring  |ID     |Combined          |
---------------------|-----------|-------|------------------|                     
100 GALLONS OF SN5484|100 GALLONS|8330780|100 GALLONS SN5484|
---------------------|-----------|-------|------------------|
100 GALLONS OF SN5484|SN5484     |8330780|100 GALLONS SN5484|
---------------------|-----------|-------|------------------|
25 LITERS OF TY50000 |TY50000    |7545215|TY50000           |

我该怎么做呢?

标签: sqlpostgresql

解决方案


用作string_agg()窗口函数:

select bo.*,
       string_agg(substring order by ?, ' ') over (partition by id) as combined
from baseoil bo;

?用于指定排序的列。否则,可以以任意顺序组合子字符串。


推荐阅读