繁体   English   中英

Oracle SQL - 将值组合成一行

[英]Oracle SQL - combining values into one row

我的表每人有多个值,我正在尝试将其合并为一行。 这是查询:

select TABLE.ID,
        TABLE.NAME,
        listagg(TABLE.HOLD, ',') within group (order by TABLE.HOLD) as hold_codes
   from TABLE
   where TABLE.ACTIVE_HOLD_IND ='Y'
        and TABLE.HOLD in('S2', 'S3', 'CO', 'WO', 'PP')
  group by
 TABLE.ID,
 TABLE.NAME,
 TABLE.HOLD
 order by 2

ID  |NAME   |HOLD_CODES
_____________________________
111 |Tom    |S2
222 |Jerry  |CO
222 |Jerry  |S2
333 |Olive  |S2,S2
444 |Popeye |CO
444 |Popeye |PP
444 |Popeye |S2
555 |Homer  |S2,S2
666 |Marge  |S2

我正在尝试将每个ID组合在一行上。 现在,查询只会获取重复行。

任何建议,将不胜感激。

从您的group by删除TABLE.HOLD

with cte as (
          select 111 as id,'Tom   ' as name,'S2' as hold from dual
union all select 222,'Jerry ','CO' from dual
union all select 222,'Jerry ','S2' from dual
union all select 333,'Olive ','S2' from dual
union all select 444,'Popeye','CO' from dual
union all select 444,'Popeye','PP' from dual
union all select 444,'Popeye','S2' from dual
union all select 555,'Homer ','S2' from dual
union all select 666,'Marge ','S2' from dual
)
select 
    cte.ID
  , cte.name
  , listagg(cte.HOLD, ',') within group (order by cte.HOLD) as hold_codes
from cte
where cte.HOLD in ('S2', 'S3', 'CO', 'WO', 'PP')
group by cte.ID
 , cte.name
order by 2

rextester演示: http ://rextester.com/FPFI26814

收益:

+-----+--------+------------+
| ID  |  NAME  | HOLD_CODES |
+-----+--------+------------+
| 555 | Homer  | S2         |
| 222 | Jerry  | CO,S2      |
| 666 | Marge  | S2         |
| 333 | Olive  | S2         |
| 444 | Popeye | CO,PP,S2   |
| 111 | Tom    | S2         |
+-----+--------+------------+

每行或每人的id是唯一的吗? 以下是安全的,无论如何:

select t.NAME,
        listagg(t.HOLD, ',') within group (order by t.HOLD) as hold_codes
from TABLE t
where t.ACTIVE_HOLD_IND = 'Y' and
      t.HOLD in('S2', 'S3', 'CO', 'WO', 'PP')
group by t.NAME
order by NAME;

显然,需要从GROUP BY删除HOLD ,但也可能需要删除ID

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM