当前位置: 代码迷 >> Oracle开发 >> *sql中根据某字段将另一字段相连*初学者*
  详细解决方案

*sql中根据某字段将另一字段相连*初学者*

热度:458   发布时间:2016-04-24 06:50:59.0
*****sql中根据某字段将另一字段相连***菜鸟求助*****
现在有一张数据表:Table1
FcaID  FSec  FName
001     1    卡片1
001     2    卡片2
002     1    卡片3
002     2    卡片4
002     3    卡片5

说明:同一个FcaID可能对应着N条记录(1=<N<=10)

如果不通过写存储过程或函数,只用sql,能否实现以下取数:
FcaID     FName
001    卡片1卡片2    
002    卡片3卡片4卡片5

在线等,多谢~~~~~~
sql

------解决方案--------------------
引用:
Quote: 引用:

现在有一张数据表:Table1
FcaID  FSec  FName
001     1    卡片1
001     2    卡片2
002     1    卡片3
002     2    卡片4
002     3    卡片5

说明:同一个FcaID可能对应着N条记录(1=<N<=10)

如果不通过写存储过程或函数,只用sql,能否实现以下取数:
FcaID     FName
001    卡片1卡片2    
002    卡片3卡片4卡片5

在线等,多谢~~~~~~




select a.FcaID,concat(a.FName,b.FName) from Table1 a, Table1 b group by a.FcaID;


这个有点问题,不对

------解决方案--------------------
with table1 as 
(
select 001 FcaID,'卡片1' FName from dual union all
select 001 FcaID,'卡片2' FName from dual union all
select 002 FcaID,'卡片3' FName from dual union all
select 002 FcaID,'卡片4' FName from dual union all
select 002 FcaID,'卡片4' FName from dual 
)
select FcaID,listagg(FName, '') within group(order by rownum),replace(to_char(wm_concat(FName)),',','')   from table1 group by FcaID


两种方法
 一种wm_concat 这种文档不推荐 12c已经去掉
 一种 listagg  推荐方法,可排序,可改变连接符

------解决方案--------------------
quote=引用:]
引用:
Quote: 引用:

大神们,帮帮忙啊

1#不行?


哥们,我按照这个改成我的表名和字段....报错了啊。能不能帮我改成我这个表的字段和表名?谢谢~
哥哥,还不行?
with table1 as
 (select 001 FcaID, '卡片1' FName
    from dual
  union all
  select 001 FcaID, '卡片2' FName
    from dual
  union all
  select 002 FcaID, '卡片3' FName
    from dual
  union all
  select 002 FcaID, '卡片4' FName
    from dual
  union all
  select 002 FcaID, '卡片4' FName from dual)
SELECT A.FcaID,
      MAX(REPLACE(SYS_CONNECT_BY_PATH(FName, '—'), '—', ''))
  FROM (SELECT T.*,
               ROW_NUMBER() OVER(PARTITION BY FcaID ORDER BY FName) AS RN
          FROM table1 T) A
 START WITH RN = 1
CONNECT BY PRIOR RN = RN - 1
       AND PRIOR FcaID = FcaID
 GROUP BY FcaID;

[
------解决方案--------------------

select FcaID,listagg(FName,'') within group(order by FcaID) as newcol  from table1 group by FcaID
/
------解决方案--------------------
concat有什么问题,多了个分隔的逗号么,那在处理下啊,listagg要11g的版本
  相关解决方案