Oracle选择不同的合并重复项



我的数据库中有一个简单的表,看起来像这个

+----------+-------------+
| category | category_id |
+----------+-------------+
| cars     |           1 |
| bikes    |           2 |
| planes   |           3 |
| bikes    |           4 |
| cars     |           5 |
+----------+-------------+

正如您所看到的,数据不是最好的,并且存在具有不同category_id的重复类别。我的目标是得到一个结果,每个类别出现一次,如果同一类别名称有多个ID,则将它们合并(逗号分隔或类似的东西(。因此,对于这个例子,结果应该看起来像这个

+----------+-------------+
| category | category_id |
+----------+-------------+
| cars     |         1,5 |
| bikes    |         2,4 |
| planes   |           3 |
+----------+-------------+

我如何将结果存档。我当前的查询看起来像这个

select distinct category, category_id 
from my_table
order by 1;

我完全不知道如何用一个独特的语句来归档这种合并。不同的陈述是正确的方法还是应该使用另一种方法?

你是对的;类别ID应该表示一个类别,因此这样的表不应该两次包含同一类别(使用两个不同的ID(。该表缺少对类别的唯一约束。

您希望看到以不同方式表示的数据,这可以通过聚合来实现:

select
category,
listagg(category_id, ', ') within group (order by category_id) as category_ids
from my_table
group by category
order by category;

像一样使用group bylistagg

select category, listagg(category_id, ',') category_id
from my_table
group by category

参见fiddle

最新更新