我有一张包含以下记录的表格
ID NAME
-------
1 AAA
2 AAA
1 BBB
2 BBB
1 CCC
我想根据 NAME 所属的 ID 显示评论列。
例如,
NAME COMMENT
------------
AAA 1,2
BBB 1,2
CCC 1
我正在使用案例来获得结果。我的查询是 -
select name,
case when (ID = 1) then (case when (ID = 2) then '1,2' else ID end) else ID end
from table1
然而,我没有得到理想的结果。
请让我知道我在查询中可以进行哪些更改以获得上述输出。
任何帮助都会很棒。感谢。
答案 0 :(得分:3)
尝试使用此查询可能会有用:
SELECT
name,
listagg(id,',' ) WITHIN GROUP (ORDER BY name)
FROM TEST
GROUP BY name
您可以试试here。
注意: listagg 可从版本11G2获得。
此处link有更多解释。
答案 1 :(得分:2)
这是您的方法的概括。您需要使用聚合来执行您想要的操作。
这是一种方法,通过显式比较值:
select name,
(case when MAX(case when id = 1 then id else '' end) = ''
then MAX(case when id = 2 then id else '' end)
when MAX(case when id = 2 then id else '' end) = ''
then MAX(case when id = 1 then id else '' end)
when MAX(case when id in (1, 2) then 1 end) is NULL
then NULL
else MAX(case when id = 1 then id else '' end) || ',' || MAX(case when id = 2 then id else '' end)
end) as Comment
from table1
group by name;
这有点棘手,因为有时候你想要逗号,有时你却不想。
真正的解决方案是使用listagg()
,如果您的Oracle版本支持它。