日期:2014-05-16 浏览次数:20525 次
转自 :http://www.ll19.com/log/2010/06/04/115.html
?
一个工作中遇到的ORACLE合并行,对合并结果排序的记录。本来简单的认为使用wmsys.wm_concat函数就行,结果出了一些小问题,解决起来还是挺折腾的,认真记录一下:
表eims_gwjk_dbcb_log部分记录如下:
SELECT * FROM eims_gwjk_dbcb_log t
?
注意选中的几行。现在想以WFID为准进行合并行的操作,一开始使用的是wmsys.wm_concat函数来进行合并行的操作。
SELECT t.wfid, wmsys.wm_concat(dbcb) AS dbcb , wmsys.wm_concat(tacheid) AS tacheid, wmsys.wm_concat(tacheno) AS tacheno, wmsys.wm_concat(senduserid) AS senduserid FROM eims_gwjk_dbcb_log t GROUP BY t.wfid;
下面是合并后的结果:
?
注意选中的行,和前面选中的四行对比。我的想法是合并行之后,合并行的字段都应该按照顺序排序。
之前选中的行:
wfid | dbcb | tacheid | tacheno | senduserid |
85652 | CB | 0000003075 | 3 | U75CB3 |
85652 | CB | 0000003076 | 2 | U76CB2 |
85652 | DB | 0000003076 | 2 | U76DB2 |
85652 | DB | 0000003075 | 3 | U75DB3 |
合并之后:
wfid | dbcb | tacheid | tacheno | senduserid |
85652 | DB,DB,CB,CB | 0000003076,0000003076,0000003075,0000003075 | 2,3,3,2 | U76DB2,U75CB3,U75DB3,U76CB2 |
通过senduserid字段可以看出来(其实这个字段的值是我更改了用来检测合并之后字段顺序用的,对应了前面几个字段的值),几个合并行的字段顺序完全乱了,并没有按照预想的结果排列。
即使排序后合并:
SELECT t.wfid, wmsys.wm_concat(dbcb) AS dbcb , wmsys.wm_concat(tacheid) AS tacheid, wmsys.wm_concat(tacheno) AS tacheno, wmsys.wm_concat(senduserid) AS senduserid