ORACLE SQL 查询结果集怎么拼接??

JasonYao 2013-09-04 08:34:25
数据库采用ORACLE
求sql大神现身
某表有A字段。。需要一条SQL 能查询出A字段拼接后的结果
比如

A
TEST
TEST2
TEST3

通过一条SQL 查询得出 TEST,TEST2,TEST3 这个字符串
这句SQL 要怎么写??
...全文
14007 19 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
-騎豬看海- 2014-03-10
  • 打赏
  • 举报
回复
引用 14 楼 liu112736 的回复:
[quote=引用 11 楼 pobaby 的回复:] [quote=引用 8 楼 javalover_yao 的回复:] [quote=引用 2 楼 zhaoxiangchong 的回复:] 看看函数wmsys.wm_concat,前提是oracle的10g以及以上才行。另外注意一点,那就是怎么分组
该函数最大支持4KB容量啊,拼接数据太多就报错了[/quote] 11g 结果集 就是 lob类型了,容量就不必太担心了。[/quote] 学习一下[/quote] mark,good job
WSZHAO_SELECT 2014-03-06
  • 打赏
  • 举报
回复
验证了一楼是正确的:
SQL> select wm_concat(test) from test;

WM_CONCAT(TEST)
--------------------------------------------------------------------------------
test,test1,test2,test3
醉爱梁静茹 2013-10-22
  • 打赏
  • 举报
回复
用行列转换函数wm_concat()吧
鲍尤佳 2013-10-22
  • 打赏
  • 举报
回复
看来我是菜鸟中的菜鸟啊!学习了
playclscl 2013-10-12
  • 打赏
  • 举报
回复
select t.A from 表名 t 如果有3条数据 3条数据中的 A字段拼成字符串对吧 二种方法 第一种 写java 查出之后 for循环 拼接字符串 第二种 写个oracle中函数处理直接拿到 你这个拿到的数据最终派什么用处 如果java中要传还是建议第一种方法 如果只是看看 ctrl+c oracle中实现吧 java代码 import java.io.BufferedWriter; import java.io.FileWriter; import java.io.IOException; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import com.xwtech.report.job.model.ReportReconciliation; public class test { public static void main(String[] args) throws ClassNotFoundException, SQLException { try { StringBuffer Result1 = new StringBuffer(); Connection conn = null; String dbUrl="jdbc:oracle:thin:@127.0.0.1:1521:orcl"; String theUser="t_mall"; String thePW="xwt"; Class.forName("oracle.jdbc.driver.OracleDriver"); conn=DriverManager.getConnection(dbUrl,theUser,thePW); String stat111 ="select t.A from 表名 t"; Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery(stat111); while(rs.next()){ String a =rs.getString("A"); Result1.append(a); } //Result1 就是你要拿的 } }catch (IOException e) { e.printStackTrace(); }finally{ //w.flush(); //w.close(); conn.close } } } oracle 中代码 一样 随手写不测试 你代码不能老copy别人的 得理解 plsql 打开个窗口复制下面代码 报错自己试着解决】 dearcle ia:=varchar2(2000); begin for i in select t.A from 表名 t loop ia:=ia||i.A end loop; dbms_output.putline(ia) end;
pobaby 2013-09-23
  • 打赏
  • 举报
回复
引用 8 楼 javalover_yao 的回复:
[quote=引用 2 楼 zhaoxiangchong 的回复:] 看看函数wmsys.wm_concat,前提是oracle的10g以及以上才行。另外注意一点,那就是怎么分组
该函数最大支持4KB容量啊,拼接数据太多就报错了[/quote] 11g 结果集 就是 lob类型了,容量就不必太担心了。
hostlocal 2013-09-23
  • 打赏
  • 举报
回复
自己写个函数 不受数据库版本限制 create or replace function func_test(tb in varchar2) return varchar2 is strsql varchar2(8000); strsql2 varchar2(1000); strsql3 varchar2(1000); type cur_type is ref cursor; cur_test cur_type ; begin strsql := null; strsql2 := null; strsql3 := 'select ename from '|| tb ; open cur_test for strsql3 ; loop exit when cur_test % notfound ; fetch cur_test into strsql2 ; strsql := strsql ||','|| strsql2 ; end loop; dbms_output.put_line(strsql); return strsql ; end ;
liu112736 2013-09-23
  • 打赏
  • 举报
回复
引用 11 楼 pobaby 的回复:
[quote=引用 8 楼 javalover_yao 的回复:] [quote=引用 2 楼 zhaoxiangchong 的回复:] 看看函数wmsys.wm_concat,前提是oracle的10g以及以上才行。另外注意一点,那就是怎么分组
该函数最大支持4KB容量啊,拼接数据太多就报错了[/quote] 11g 结果集 就是 lob类型了,容量就不必太担心了。[/quote] 学习一下
hovy_yang 2013-09-23
  • 打赏
  • 举报
回复
DECLARE COL VARCHAR2(2000); BEGIN FOR I IN ( SELECT T.COL||',' AS COL FROM TB T) LOOP COL := COL||I.COL; END LOOP; COL := SUBSTR(COL,1,LENGTH(COL)-1); DBMS_OUTPUT.put_line(COL); END; --写出自己曾用过的方式,顺便蹭分
Persistence_x 2013-09-23
  • 打赏
  • 举报
回复
with a as
(
select '1' as czbh,'1' as fsr from dual union all 
select '5' as czbh,'3' as fsr from dual union all 
select '3' as czbh,'3' as fsr from dual union all 
select '6' as czbh,'4' as fsr from dual union all
select '7' as czbh,'2' as fsr from dual union all  
select '2' as czbh,'2' as fsr from dual union all  
select '0' as czbh,'1' as fsr from dual union all  
select '15' as czbh,'3' as fsr from dual union all  
select '16' as czbh,'4' as fsr from dual union all  
select '17' as czbh,'2' as fsr from dual union all  
select '12' as czbh,'2' as fsr from dual union all  
select '10' as czbh,'1' as fsr from dual union all  
select '2' as czbh,'2' as fsr from dual 
)
select fsr,max(r)
from (select fsr, wm_concat(czbh) over (partition by fsr order by to_number(czbh)) r from a)
group by fsr
刚刚写了一个关于WM_CONCAT函数的用法 希望对你有帮助
异常异长 2013-09-18
  • 打赏
  • 举报
回复
listagg
JasonYao 2013-09-17
  • 打赏
  • 举报
回复
引用 2 楼 zhaoxiangchong 的回复:
看看函数wmsys.wm_concat,前提是oracle的10g以及以上才行。另外注意一点,那就是怎么分组
该函数最大支持4KB容量啊,拼接数据太多就报错了
singzero 2013-09-05
  • 打赏
  • 举报
回复
分析函数 listagg(),这个函数是专门为了解决这种问题的。
  • 打赏
  • 举报
回复
sys_connect_by_path,9i也可以用这个
  • 打赏
  • 举报
回复
很基础的数据合并 都回复了 蹭点分
u010412956 2013-09-05
  • 打赏
  • 举报
回复
wm_concat,listagg 函数 都可。。。一个10g,一个11g
jdsnhan 2013-09-04
  • 打赏
  • 举报
回复
引用 2 楼 zhaoxiangchong 的回复:
看看函数wmsys.wm_concat,前提是oracle的10g以及以上才行。另外注意一点,那就是怎么分组
] +1
善若止水 2013-09-04
  • 打赏
  • 举报
回复
看看函数wmsys.wm_concat,前提是oracle的10g以及以上才行。另外注意一点,那就是怎么分组
quanhj 2013-09-04
  • 打赏
  • 举报
回复
select wm_concat(a) from tbname

17,382

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧