wm_concat函数的排序问题
来源:互联网 发布:mysql删除and语句 编辑:程序博客网 时间:2024/05/07 12:33
SQL> select * from t_test;需求为:得到根据T_TYPE聚合,并且根据T_ID排序的一个集合值。
T_ID T_NAME T_TYPE
---------- -------------------- --------------------1 保定 河北
2 邯郸 河北
8 韶关 广东
7 东莞 广东
6 深圳 广东
理论值为:普通语句为:
T_TYPE T_NAME
---------- --------------------
广东 深圳,东莞,韶关河北 保定,邯郸
SQL> col t_name format a20
SQL> SELECT T_TYPE,TO_CHAR(WM_CONCAT(T_NAME)) T_NAME2 FROM T_TEST
3 GROUP BY T_TYPE;
T_TYPE T_NAME
---------- --------------------
广东 韶关,深圳,东莞河北 保定,邯郸
结果发现,T_NAME为乱序排列,无法满足要求,那如果例如子查询先排序,再聚合呢?
SQL> SELECT T_TYPE,TO_CHAR(WM_CONCAT(T_NAME)) T_NAME
2 FROM (SELECT * FROM T_TEST ORDER BY T_ID)3 GROUP BY T_TYPE;
T_TYPE T_NAME
---------- --------------------
广东 深圳,韶关,东莞河北 保定,邯郸
发现还是不行,即使子查询是排序的,wm_concat也不按顺序聚合。下面为解决方法!
********************************************************************************************************************************
解决方法一:
SQL> SELECT DISTINCT T_TYPE,
2 TO_CHAR(WM_CONCAT(T_NAME)
3 OVER(PARTITION BY T_TYPE ORDER BY T_ID
4 ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)) T_NAME
5 FROM T_TEST;
T_TYPE T_NAME
---------- --------------------
广东 深圳,东莞,韶关
河北 保定,邯郸
SQL> SELECT T_TYPE, T_NAME
2 FROM (SELECT T_TYPE,
3 TO_CHAR(WM_CONCAT(T_NAME)
4 OVER(PARTITION BY T_TYPE ORDER BY T_ID
5 ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)) T_NAME
6 FROM T_TEST)
7 GROUP BY T_TYPE, T_NAME;
T_TYPE T_NAME
---------- --------------------
广东 深圳,东莞,韶关
河北 保定,邯郸
解决方法二:
SQL> SELECT T_TYPE, MAX(TO_CHAR(T_NAME)) T_NAME
2 FROM (SELECT T_TYPE,
3 WM_CONCAT(T_NAME) OVER(PARTITION BY T_TYPE ORDER BY T_ID) T_NAME
4 FROM T_TEST)
5 GROUP BY T_TYPE;
T_TYPE T_NAME
---------- --------------------
广东 深圳,东莞,韶关
河北 保定,邯郸
解决方法三(如果数据量不大的话,可以用树形查询来做):
SQL> SELECT T_TYPE, SUBSTR(MAX(SYS_CONNECT_BY_PATH(T_NAME, ',')), 2) T_NAME
2 FROM (SELECT T_NAME,
3 T_ID,
4 T_TYPE,
5 ROW_NUMBER() OVER(PARTITION BY T_TYPE ORDER BY T_ID) RN
6 FROM T_TEST)
7 START WITH RN = 1
8 CONNECT BY RN = PRIOR RN + 1
9 AND T_TYPE = PRIOR T_TYPE
10 GROUP BY T_TYPE;
T_TYPE T_NAME
---------- --------------------
广东 深圳,东莞,韶关
河北 保定,邯郸
- wm_concat函数的排序问题
- wm_concat函数的排序问题
- wm_concat函数的排序问题
- wm_concat排序问题
- wm_concat排序问题
- 关于Oracle函数wm_concat的一些问题
- 重写Oracle的wm_concat函数,以自定义分隔符、排序
- oracle的wm_concat函数
- oracle 中自带函数wm_concat排序
- WMSYS.WM_CONCAT 函数的用法
- oracle wm_concat函数的使用
- 强大的oracle函数wm_concat
- oracle wm_concat函数的使用
- wm_concat函数
- wm_concat函数
- wm_concat函数
- wm_concat函数
- wm_concat函数
- 判断一个数是否为素数的几种简单写法
- zpipe解说
- jQuery HTML 操作
- linux安装wireshark
- easyui 学习初步1
- wm_concat函数的排序问题
- POJ 1228 Grandpa's Estate(凸包)
- ModelSim SE PLUS 6.5b的使用
- jdk与jre的区别
- 第九周一
- uva - 10716 - Evil Straw Warts Live(贪心、模拟)
- SQL注入原理讲解,很不错!
- Android闪闪发光字体效果
- 同步调用、异步调用、异步回调的区别