资源描述:
《多行合并为一行的sql语句》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、多行合并为一行的SQL语句目录²例一1²例二2²例三3²例四5²例五6例六如何将多行数据合并成一行多列7例七C#12²例一表数据:testno q------------1 n11 n21 n31 n41 n53 t13 t23 t33 t43 t53 t62 m1语句:withtestas(SELECT1ASNo,'N1'ASqFROMDualUNIONALLSELECT1ASNo,'N2'ASqFROMDualUNIONALLSELECT1ASNo,'N3'AS
2、qFROMDualUNIONALLSELECT1ASNo,'N4'ASqFROMDualUNIONALLSELECT1ASNo,'N5'ASqFROMDualUNIONALLSELECT3ASNo,'T1'ASqFROMDualUNIONALLSELECT3ASNo,'T2'ASqFROMDualUNIONALLSELECT3ASNo,'T3'ASqFROMDualUNIONALLSELECT3ASNo,'T4'ASqFROMDualUNIONALLSELECT3ASNo,'T5'ASqFROMDualUNIONALLSELECT3ASNo,'T
3、6'ASqFROMDualUNIONALLSELECT2ASNo,'M1'ASqFROMDual)SELECTNo,Substr(Jg,2,Length(Jg))ASJg FROM(SELECTNo,MAX(Sys_Connect_By_Path(q,','))ASJg FROM(SELECTNo, q, Row_Number()Over(PARTITIONBYNoORDERBYNo,q)Rn FROMTest)
4、 STARTWITHRn=1 CONNECTBYRn-1=PRIORRn ANDNo=No GROUPBYNo)谭工前面那个示例"CONNECTBYRn-1=PRIORRnANDNo=No"也应改成"CONNECTBYNo
5、
6、'
7、'
8、
9、(Rn-1)=PRIOR(NO
10、
11、'
12、'
13、
14、Rn)"结果才对。另外这个SQL只适合在小数据集或索引结果中进行处理,不然要使用全表扫描效率不高。输出:1 ,N1,N2,N3,N4,N52 ,M13 ,T1,T2,T3,T4,T5,T6²例二另解:人员所属部
15、门:第一个部门为缺省部门SELECT人员编号, MIN(姓名)AS姓名, Substr(MAX(To_Char(Length(部门),'99999999')
16、
17、部门),11,2000)AS部门 FROM(SELECT人员编号,姓名,Sys_Connect_By_Path(部门,',')AS部门 FROM(SELECT姓名, 部门, 缺省, 人员编号,
18、 Row_Number()Over(PARTITIONBY姓名ORDERBY人员编号,缺省DESC)Rn FROM(SELECTc.姓名, b.名称AS部门, a.缺省, c.编号AS人员编号, b.编码AS部门编码 FROM部门人员a
19、,部门表b,人员表c WHEREa.部门id=b.Id ANDa.人员id=c.Id )t) STARTWITHRn=1 CONNECTBY(人员编号
20、
21、(Rn-1))=PRIOR(人员编号
22、
23、Rn)) GROUPBY人员编号 ORDERBY部门CONNECTBY(人员编号
24、
25、(Rn-1))=PRIOR(人员编号
26、
27、Rn)这一句整很久才整出来,为了避免不等长的编号,下面的改进也许更合
28、适:CONNECTBY(人员编号
29、
30、'
31、'
32、
33、(Rn-1))=PRIOR(人员编号
34、
35、'
36、'
37、
38、Rn)这样就不会出现错乱了.²例三如何将