0

我有一个记录如下表

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

但是,我没有得到想要的结果。

请让我知道我可以在查询中进行哪些更改以获得上述输出。

任何帮助都会很棒。谢谢。

4

2 回答 2

3

尝试使用此查询可能会有用:

SELECT 
  name, 
  listagg(id,',' ) WITHIN GROUP (ORDER BY name) 
FROM TEST
GROUP BY name

你可以在这里试试这个。

注意:listagg从 11G2 版本开始可用。

在这里这个链接有更多的解释。

于 2013-07-26T17:09:27.917 回答
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 版本支持的情况下使用。

于 2013-07-26T16:55:20.517 回答