wm_concat排序问题
2014-11-26 17:19
197 查看
wm_concat在行转列的时候非常有用,但在行转列的过程中的排序问题常常难以控制。
可见下面例子:
测试表数据:tb_spec
SIGN CODE
1 0001 01
2 0001 02
3 0001 03
4 0001 04
5 0002 05
6 0002 06
7 0001 07
8 0001 08
9 0002 09
10 0002 10
11 0001 11
12 0001 12
13 0002 13
14 0002 14
15 0001 15
16 0001 16
17 0002 17
18 0001 18
19 0001 19
20 0001 20
测试wm_concat后的顺序:
测试1:
SQL> select a.sign,wm_concat(a.code)
from tb_spec a group by a.sign;
SIGN WM_CONCAT(A.CODE)
———- ——————————————————————————–
0001 01,20,19,18,16,15,12,11,08,07,04,03,02
0002 05,17,14,13,10,09,06
可见wm_concat后的顺序并没有按大->小,或小->大的顺序。
测试2:
–参考网上一些解决思路
SQL> select a.sign,wm_concat(a.code)
from (select b.sign,b.code from tb_spec order by b.code ) a
group by a.sign;
SIGN WM_CONCAT(A.CODE)
———- ——————————————————————————–
0001 01,20,19,18,16,15,12,11,08,07,04,03,02
0002 05,17,14,13,10,09,06
可见顺序问题还是没有解决
最终解决思路:
SQL> select b.sign, max(b.r) code
from
(select
a.sign,
wm_concat(a.code) over (partition by a.sign order by a.code) r
from tb_spec a
) b
group by b.sign
SIGN CODE
———- ——————————————————————————–
0001 01,02,03,04,07,08,11,12,15,16,18,19,20
0002 05,06,09,10,13,14,17
转载自:http://blog.163.com/shuzhen_an/blog/static/11939930420131019103351170/
可见下面例子:
测试表数据:tb_spec
SIGN CODE
1 0001 01
2 0001 02
3 0001 03
4 0001 04
5 0002 05
6 0002 06
7 0001 07
8 0001 08
9 0002 09
10 0002 10
11 0001 11
12 0001 12
13 0002 13
14 0002 14
15 0001 15
16 0001 16
17 0002 17
18 0001 18
19 0001 19
20 0001 20
测试wm_concat后的顺序:
测试1:
SQL> select a.sign,wm_concat(a.code)
from tb_spec a group by a.sign;
SIGN WM_CONCAT(A.CODE)
———- ——————————————————————————–
0001 01,20,19,18,16,15,12,11,08,07,04,03,02
0002 05,17,14,13,10,09,06
可见wm_concat后的顺序并没有按大->小,或小->大的顺序。
测试2:
–参考网上一些解决思路
SQL> select a.sign,wm_concat(a.code)
from (select b.sign,b.code from tb_spec order by b.code ) a
group by a.sign;
SIGN WM_CONCAT(A.CODE)
———- ——————————————————————————–
0001 01,20,19,18,16,15,12,11,08,07,04,03,02
0002 05,17,14,13,10,09,06
可见顺序问题还是没有解决
最终解决思路:
SQL> select b.sign, max(b.r) code
from
(select
a.sign,
wm_concat(a.code) over (partition by a.sign order by a.code) r
from tb_spec a
) b
group by b.sign
SIGN CODE
———- ——————————————————————————–
0001 01,02,03,04,07,08,11,12,15,16,18,19,20
0002 05,06,09,10,13,14,17
转载自:http://blog.163.com/shuzhen_an/blog/static/11939930420131019103351170/
相关文章推荐
- wm_concat排序问题
- wm_concat函数的排序问题
- wm_concat,对结果进行排序
- wmsys.wm_concat结果长度限制的问题
- [oracle]百思不得其解:wmsys.wm_concat的用法与数据库版本的问题
- wmsys.wm_concat 长度限制的问题
- 改写的wm_concat函数运行效率问题
- oracle 列转行函数 WMSYS.WM_CONCAT 排序不规则处理
- wmsys.wm_concat结果长度限制的问题
- wmsys.wm_concat结果长度限制的问题
- Oracle之多行记录变一行记录,行变列,并排序(wmsys.wm_concat)
- WMSYS.WM_CONCAT排序
- 解决wmsys.wm_concat在11G不兼容问题
- 关于oracle中的wmsys.wm_concat中的使用问题
- oracle 列转行函数 WMSYS.WM_CONCAT 排序不规则处理
- Oracle wmsys.wm_concat()函数 顺序问题 分隔符问题
- Oracle之多行记录变一行记录,行变列,并排序(wmsys.wm_concat)
- SQL group by and wmsys.wm_concat 的使用和乱码问题
- Oracle之多行记录变一行记录,行变列,并排序(wmsys.wm_concat)
- oracle数据库使用wm_concat()函数时遇到的一个问题