如何通过sql实现行转列???
create table t2(col1 varchar2(10),col2 varchar2(10));
insert into t2 values('001','vl1');
insert into t2 values('001','vl2');
insert into t2 values('001','vl3');
insert into t2 values('002','vl1');
insert into t2 values('002','vl2');实现如下表结构:col1 col2 col3 col4
---- ----- ----- ------
001 vl1 vl2 vl3
002 vl1 vl2
001有N行,相应的也可以转成N列,请高手指点。
create table t2(col1 varchar2(10),col2 varchar2(10));
insert into t2 values('001','vl1');
insert into t2 values('001','vl2');
insert into t2 values('001','vl3');
insert into t2 values('002','vl1');
insert into t2 values('002','vl2');实现如下表结构:col1 col2 col3 col4
---- ----- ----- ------
001 vl1 vl2 vl3
002 vl1 vl2
001有N行,相应的也可以转成N列,请高手指点。
解决方案 »
- java连接数据库出现这样的异常。。请大家来瞧瞧。。
- RHEL3 安装Oracle9i的问题
- mysql 过程捕捉异常
- 50分问个简单问题。
- ORA-01467: sort key too long的问题?请教如何解决和避免
- 如何对一个表进行写锁和解锁,用那种命令
- 我有一用户买的有许可的oracle9i for windows的盘,安装后发现和从网上下载的一样,但是不能注册啊,是不有试用的问题,有人说只是有服务,网
- 自引用查询
- 请问在unix下如何用c++操作oracle数据库?急!急!急!
- java编程和数据库关系
- 如何用SQL实现如pb的crosstab类型,分不够可再加
- 很鬼马的 无法从套接字读取更多的数据
以下是网上转载的方法一:
create table t2(col1 varchar2(10),col2 varchar2(10));
insert into t2 values('001','vl1');
insert into t2 values('001','vl2');
insert into t2 values('001','vl3');
insert into t2 values('002','vl1');
insert into t2 values('002','vl2');SELECT COL1, LTRIM(MAX(SYS_CONNECT_BY_PATH(COL2, ' ')), ',') COL2
FROM (SELECT COL1,
COL2,
MIN(COL2) OVER(PARTITION BY COL1) COL2_MIN,
(ROW_NUMBER() OVER(ORDER BY COL1, COL2)) +
(DENSE_RANK() OVER(ORDER BY COL1)) NUMID
FROM T2)
START WITH COL2 = COL2_MIN
CONNECT BY NUMID - 1 = PRIOR NUMID
GROUP BY COL1;COL1 COL2
---------- ----------------------------------------
001 vl1,vl2,vl3
002 vl1,vl2
select col1,col2,
lead(col2,1) over (order by col1,col2) col3 ,
lead(col1,1) over (order by col1,col2) col3_1 ,
lead(col2,2) over (order by col1,col2) col4,
lead(col1,2,col1) over (order by col1,col2) col4_1
......
from t2
) t where col1=col3_1 and col1=col4_1 ... ;
根据你N的情况,再添加几列就可以,如果N是不确定的,只能动态去拼sql,,没有万能的!