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: 好的,谢谢你
2 年多之前 回复
danielinbiti
danielinbiti 回复Jef_Zhang: 自己写自定义函数,除了这三种方式,想不出其他方式,或者你除非类型确定,就三种值,那 就用case when的方式行转列,再合并列
2 年多之前 回复
Jef_Zhang
Jef_Zhang 回复danielinbiti: 我就是不想用sys_connect_by_path,太麻烦。我就想知道有没得简单的写法,哎
2 年多之前 回复
danielinbiti
danielinbiti 回复Jef_Zhang: 若果oracle10以下,那就用sys_connect_by_path ,就是sql会复杂一些
2 年多之前 回复
Jef_Zhang
Jef_Zhang 我的版本不支持该函数
2 年多之前 回复
Jef_Zhang
Jef_Zhang   2016.03.25 09:42

图片说明

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
oracle数据库-行转列加排序
行转列排序之前: select * from lawtlegaladvisermanageedu t order by id asc; id EDUCATIONID EDUCATION PROFESSIONAL RELATEID 1 100005 116245 大专生 电子 100048 2 100013 116245 大专生 电信 10004
ORACLE 列转行和行转列的SQL
网络上关于行转列和列转行的文章不少,但要么太复杂,要么太凌乱,此处用一个小例子说明如何通过简单SQL实现行列转换。 表test NAME KM CJ 张三 语文 80 张三 数学 86 张三 英语 75 李四 语文
行转列逗号隔开&逗号隔开列转行
ORACLE:SQL> create table t(id int,name varchar2(30)); 表已创建。 SQL> insert into t values(1,'a'); 已创建 1 行。 SQL> insert into t values(1,'b'); 已创建 1 行。 SQL> insert into t values(1,'c'); 已...
Oracle行转列、列转行的Sql语句总结
目录结构如下: 行转列 列转行 [一]、行转列   1.1、初始测试数据   表结构:TEST_TB_GRADE   Sql代码  create table TEST_TB_GRADE  (    ID        NUMBER(10) not null,    USER_NAME VARCHAR2(20 CHAR),    COURSE    VARCHAR2(20
Oracle 行转列小结
最近在工作中,对行转列进行了应用,在此做一个简单的小结。       转换过程如下:         1、创建表结构 CREATE TABLE RowToCol ( ID NUMBER(10) not null, USER_NAME VARCHAR2(20 CHAR), COURSE VARCHAR2(20 CHAR), SCORE VARCHAR2(2
Oracle 动态SQL实现SQL查询子集行转列
动态SQL实现SQL查询子集行转列
行转列,列转行,decode,case... when ... then ..
行转列,列转行,decode, case...  when ... then ..case...  when ... then ..[when ...  then ] else ... end 原文: 重温SQL——行转列,列转行 行转列,列转行是我们在开发过程中经常碰到的问题。行转列一般通过CASE WHEN 语句来实现,也可以通过 SQL S
Oracle中用一条Sql实现任意的行转列拼接 多行拼接
表结构和数据如下(表名Test): NO VALUE  NAME 1       a       测试1 1       b       测试2 1       c       测试3 1       d       测试4 2       e       测试5 4       f        测试6 4       g       测试7 Sql语句: select No
Oracle SQL函数pivot、unpivot转置函数实现行转列、列转行
Oracle SQL函数pivot、unpivot转置函数实现行转列、列转行
oracle行转列SQL,clob转String
1.行转列 select wm_concat(kpSize) kpSize from( SELECT      sp."PRD_PLAN_ID" AS 作业计划号,      '('||rownum||')【'||sco."PRD_LENGTH"/1000||'米'||sco."PRD_ORD_NUM"||'张】'      AS kpSize FROM      "SC_PLAN