資源描述:
《多行合并為一行的sql語句》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在應(yīng)用文檔-天天文庫。
1、多行合并為一行的SQL語句目錄2例一12例二22例三32例四52例五6例六如何將多行數(shù)據(jù)合并成一行多列7例七C#122例一表數(shù)據(jù):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"也應(yīng)改成"CONNECTBYNo
5、
6、'
7、'
8、
9、(Rn-1)=PRIOR(NO
10、
11、'
12、'
13、
14、Rn)"結(jié)果才對。另外這個SQL只適合在小數(shù)據(jù)集或索引結(jié)果中進行處理,不然要使用全表掃描效率不高。輸出:1?,N1,N2,N3,N4,N52?,M13?,T1,T2,T3,T4,T5,T62例二另解:人員所屬部
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)這樣就不會出現(xiàn)錯亂了.2例三如何將