我有一个动态输入数据,如下所示
Id val
--- -----
10 A
10 B
11 A
11 B
11 C
. .
. .
我需要按照顺序打印它。
Id Val
---- ----
10 A,B
11 A,B,C
我需要编写单个查询来转换上述数据,而不使用任何内置函数。
我的尝试:我可以通过将数据填充到一些临时数据并更新记录来尝试这一点。
步骤1:尝试仅使用唯一的id列加载到临时数据,并将val作为null加载,如下所示。
create table temp as (select id, null as val from table group by id) with data;
步骤2:更新如下。
update temp t2
set val=(case when t2.val is null then t1.val else t1.val || ',' t2.val end) from
(select val from table t1 where t1.val= t2.val) t1
现在,临时表将具有以上输出... 但我需要的是,无论如何都要在不使用Temp表(单个查询)的情况下输出此输出..
答案 0 :(得分:0)
可以试试这个:
select ID, group_concat(distinct value) as value
from table
group by ID
答案 1 :(得分:0)
在Oracle中,您将使用listagg()
:
select id, listagg(val, ',') within group (order by val)
from table t
group by id
order by id;
据我所知,没有ANSI标准机制来执行此操作。