赞
踩
偶然遇到同学问了个sql的问题,闲着没事捣鼓了一下。
他的问题是:如何把下面这样的数据,每两行数据按照第一个字段合并为一行。
create table tp_user(
user_no varchar2(2char),
user_name varchar2(10 char)
)
user_no user_name
01 a
01 b
02 a
02 b
合并的效果:01 a;b
02 a;b
我用toda大概写了一个能实现的,应该还有很大优化空间,以后有空再看。
SELECTA.USER_NO,A.USER_NAME || ';' || B.USER_NAME
FROM(SELECT USER_NO, USER_NAME
FROM(SELECT ROW_NUMBER ()
OVER(PARTITIONBY(USER_NO)ORDERBY USER_NO)
I,
USER_NO,
USER_NAME
FROM TP_USER)
WHERE I =1)A,
(SELECT USER_NO, USER_NAME
FROM(SELECT ROW_NUMBER ()
OVER(PARTITIONBY(USER_NO)ORDERBY USER_NO)
I,
USER_NO,
USER_NAME
FROM TP_USER)
WHERE I =2) B
WHEREA.USER_NO = B.USER_NO;
运行结果如图:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。