2 jef zhang Jef_Zhang 于 2016.03.25 09:09 提问

oracle行转列问题。纯SQL

oracle中有一张读者表(TableReader),里面有一列保存读者类型(ColReaderTypeIds),存的值是类似(1,2,3)这种,分别对应读者类型表(TableReaderType)中的类型(ReaderTypeId),1,类型1;2,类型2;3,类型3。是三行数据!读者可以有多个类型。TableReaderType中的数据不确定,所以不能用case when。我要在查询TableReader表中的ColReaderTypeIds的时候,将该列显示成名称,而不是ID,应该怎么做?意思就是,ColReaderTypeIds列存的是"1,2,3";显示出来后变成"类型1,类型2,类型3"

2个回答

danielinbiti
danielinbiti   Ds   Rxr 2016.03.25 09:31
已采纳
类似下面这样
select 读者名称,wm_sys.wm_concat (ReaderTypeId) from(
 select 读者名称,ReaderTypeId from TableReader,TableReaderType where instr(TableReader.ColReaderTypeIds,ReaderTypeId)>0
 ) group by 读者名称
Jef_Zhang
Jef_Zhang 回复danielinbiti: 好的,谢谢你
一年多之前 回复
danielinbiti
danielinbiti 回复Jef_Zhang: 自己写自定义函数,除了这三种方式,想不出其他方式,或者你除非类型确定,就三种值,那 就用case when的方式行转列,再合并列
一年多之前 回复
Jef_Zhang
Jef_Zhang 回复danielinbiti: 我就是不想用sys_connect_by_path,太麻烦。我就想知道有没得简单的写法,哎
一年多之前 回复
danielinbiti
danielinbiti 回复Jef_Zhang: 若果oracle10以下,那就用sys_connect_by_path ,就是sql会复杂一些
一年多之前 回复
Jef_Zhang
Jef_Zhang 我的版本不支持该函数
一年多之前 回复
Jef_Zhang
Jef_Zhang   2016.03.25 09:42

图片说明

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!