- 1、本文档共15页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
多行合并为1行的SQL语句
多行合并为一行的SQL语句
目录
TOC \o 1-3 \h \z \u HYPERLINK \l _Toc184622384 ? 例一 PAGEREF _Toc184622384 \h 1
HYPERLINK \l _Toc184622385 ? 例二 PAGEREF _Toc184622385 \h 2
HYPERLINK \l _Toc184622386 ? 例三 PAGEREF _Toc184622386 \h 3
HYPERLINK \l _Toc184622387 ? 例四 PAGEREF _Toc184622387 \h 5
HYPERLINK \l _Toc184622388 ? 例五 PAGEREF _Toc184622388 \h 6
HYPERLINK \l _Toc184622389 例六 如何将多行数据合并成一行多列 PAGEREF _Toc184622389 \h 7
HYPERLINK \l _Toc184622390 例七 C# PAGEREF _Toc184622390 \h 12
例一
表数据:test
no?????? q
1? ? ? ? n11? ? ? ? n21? ? ? ? n31? ? ? ? n41? ? ? ? n53? ? ? ? t13? ? ? ? t23? ? ? ? t33? ? ? ? t43? ? ? ? t53? ? ? ? t62? ? ? ? m1
语句:
with test as ( SELECT 1 AS No, N1 AS q FROM Dual UNION ALLSELECT 1 AS No, N2 AS q FROM Dual UNION ALLSELECT 1 AS No, N3 AS q FROM Dual UNION ALLSELECT 1 AS No, N4 AS q FROM Dual UNION ALLSELECT 1 AS No, N5 AS q FROM Dual UNION ALLSELECT 3 AS No, T1 AS q FROM Dual UNION ALLSELECT 3 AS No, T2 AS q FROM Dual UNION ALLSELECT 3 AS No, T3 AS q FROM Dual UNION ALLSELECT 3 AS No, T4 AS q FROM Dual UNION ALLSELECT 3 AS No, T5 AS q FROM Dual UNION ALLSELECT 3 AS No, T6 AS q FROM Dual UNION ALLSELECT 2 AS No, M1 AS q FROM Dual) SELECT No, Substr(Jg, 2, Length(Jg)) AS Jg? FROM (SELECT No, MAX(Sys_Connect_By_Path(q, ,)) AS Jg????????? FROM (SELECT No,?????????????????????? q,?????????????????????? Row_Number() Over(PARTITION BY No ORDER BY No, q) Rn????????????????? FROM Test)???????? START WITH Rn = 1??????? CONNECT BY Rn - 1 = PRIOR Rn?????????????? AND No = No???????? GROUP BY No)
谭工前面那个示例CONNECT BY Rn - 1 = PRIOR Rn AND No = No也应改成CONNECT BY No|||||(Rn - 1) = PRIOR (NO|||||Rn)结果才对。
另外这个SQL只适合在小数据集或索引结果中进行处理,不然要使用全表扫描效率不高。
输出:
1?,N1,N2,N3,N4,N52?,M13?,T1,T2,T3,T4,T5,T6
例二
另解:
人员所属部门:第一个部门为缺省部门SELECT 人员编号,?????? MIN(姓名) AS 姓名,?????? Substr(MAX(To_Char(Length(部门), || 部门), 11, 2000) AS 部门? FROM (SELECT 人员编号, 姓名, Sys_Connect_By_Path(部门, ,) AS 部门?????????
文档评论(0)