Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql Oracle选择不同的合并重复项_Sql_Oracle_Oracle12c - Fatal编程技术网

Sql Oracle选择不同的合并重复项

Sql Oracle选择不同的合并重复项,sql,oracle,oracle12c,Sql,Oracle,Oracle12c,我的数据库中有一个简单的表,如下所示 +----------+-------------+ | category | category_id | +----------+-------------+ | cars | 1 | | bikes | 2 | | planes | 3 | | bikes | 4 | | cars | 5 | +----------+---

我的数据库中有一个简单的表,如下所示

+----------+-------------+
| category | category_id |
+----------+-------------+
| cars     |           1 |
| bikes    |           2 |
| planes   |           3 |
| bikes    |           4 |
| cars     |           5 |
+----------+-------------+
+----------+-------------+
| category | category_id |
+----------+-------------+
| cars     |         1,5 |
| bikes    |         2,4 |
| planes   |           3 |
+----------+-------------+
select distinct category, category_id 
from my_table
order by 1;
正如您所见,数据不是最好的,并且存在具有不同类别ID的重复类别。我的目标是得到一个结果,其中每个类别只出现一次,如果同一类别名称有多个ID,则将它们合并(逗号分隔或诸如此类)。对于这个例子,结果应该是这样的

+----------+-------------+
| category | category_id |
+----------+-------------+
| cars     |           1 |
| bikes    |           2 |
| planes   |           3 |
| bikes    |           4 |
| cars     |           5 |
+----------+-------------+
+----------+-------------+
| category | category_id |
+----------+-------------+
| cars     |         1,5 |
| bikes    |         2,4 |
| planes   |           3 |
+----------+-------------+
select distinct category, category_id 
from my_table
order by 1;
我如何存档该结果。我当前的查询如下所示

+----------+-------------+
| category | category_id |
+----------+-------------+
| cars     |           1 |
| bikes    |           2 |
| planes   |           3 |
| bikes    |           4 |
| cars     |           5 |
+----------+-------------+
+----------+-------------+
| category | category_id |
+----------+-------------+
| cars     |         1,5 |
| bikes    |         2,4 |
| planes   |           3 |
+----------+-------------+
select distinct category, category_id 
from my_table
order by 1;

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

使用
groupby
listag
类似的方法

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

参见使用
分组依据
列表标签

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

你是对的;类别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;

你是对的;类别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;

DISTINCT
无法在此处工作,因为
类别
/
类别id
对已经是不同的。
DISTINCT
无法在此处工作,因为
类别
/
类别id
对已经是不同的。