关于Oracle,在一行中个别字段多行显示。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于Oracle,在一行中个别字段多行显示。相关的知识,希望对你有一定的参考价值。

id number name
1 10 a
1 10 b
1 20 a
2 20 b
3 10 a
4 40 c
4 40 d
4 30 e
执行完SQL完要求输出结果如下:
id name
1 a,b
2 b
3 a
4 c,d,e
4
Oracle数据库是9i的,忘了说了。八级的那位朋友对不住了,呵呵。没有最后那一行,就是只有4那一行。表名字就叫test吧,其实无所谓,主要是为了学习这个查询的方法。能详细点最好。我的Oracle水平不高,如果能解释下你所写的步骤和原理更好。

select id, max(substr(sys_connect_by_path(name, \',\'),2)) str
from (SELECT id, name,
dense_rank() OVER(PARTITION BY id ORDER BY id,name) RN
FROM people ) t
start with rn = 1
connect by rn = prior rn + 1 and id = prior id
group by id
把原来我写的回答里的row_number()换成dense_rank()就行了,开窗函数,也就是over(),中的order by id,name,原来只按id排的序
参考技术A

select * from test;

select t.id, max(t.a)

  from (select id, wm_concat(name) over(partition by id) a

          from (select distinct id, name from test)) t

 group by t.id;

表结构和你提提供的一模一样,我用的是oracle 10g  我不知道9i  可以不

参考技术B ID不可以重复的哦! 你要查name值为c,d,e你可以要 in(id)查询 里面写你要查询的ID 参考技术C 导入的时候,对于字符串有没有指定“”这样的包括符?时间类型的导入的时候有没有指定时间字段的格式?
很有可能是你导入的DATETIME字段没有指定格式,toad就按默认格式导入,结果有不匹配的。
导入的时候,看一下那些选项,重新调整一下应该就可以了
包括字段分隔符

ORACLE——将多行文本数据转换成一行

前几天项目中有个到处文件的功能,但是有一个字段存进的数据存在换行情况,导出来的数据会出现错乱的情况,所以需要把换行的数据转换成一行。当然也可以在java程序中实现。

数据库中的数据为:

SQL> SELECT A.ADDRESS FROM T_USER_INFO A WHERE A.ID=001;
ADDRESS 
--------------------------------------------------------------------------------
上海市
宝山区
同济路

 

在ORACLE中使用SQL实现换行的方式为:

SQL> SELECT REPLACE(REPLACE(A.ADDRESS, CHR(TO_NUMBER(0A, xx)), ‘‘), CHR(TO_NUMBER(0D, xx)),‘‘)  ADDRESS FROM T_USER_INFO A WHERE A.ID=001;
ADDRESS 
--------------------------------------------------------------------------------
上海市宝山区同济路

 

以上是关于关于Oracle,在一行中个别字段多行显示。的主要内容,如果未能解决你的问题,请参考以下文章

oracle 结果集行转列,多行数据转为一行显示,第一列内容拼接生成字段名

oracle 一个字段转多行

求助,oracle多行数据合并成一行

求助,oracle多行数据合并成一行

sqlplus多行代码怎么

Oracle一列的多行数据拼成一行显示