wm concat函式的排序問題

2021-09-07 09:19:08 字數 1655 閱讀 6397

wm_concat在行轉列的時候非常有用,但在行轉列的過程中的排序問題常常難以控制。

可見下面例子:

準備測試表:

drop table t;

create table t (n number,m number);

insert into t values(1,1);

insert into t values(5,3);

insert into t values(3,3);

insert into t values(6,5);

insert into t values(7,2);

insert into t values(2,2);

insert into t values(0,1);

insert into t values(11,1);

insert into t values(15,3);

insert into t values(13,3);

insert into t values(16,5);

insert into t values(17,2);

insert into t values(12,2);

insert into t values(10,1);

commit;

sql> select * from t order by 2,1;

n m———- ———-

0 11 1

10 1

11 1

2 27 2

12 2

17 2

3 35 3

13 3

15 3

6 516 5

測試wm_concat後的順序:

測試1:

sql> select m,wm_concat(n) from t group by m;

m wm_concat(n)

———- ——————————————————————————–

1 11,0,1,10

2 17,2,7,12

3 15,3,5,13

5 16,6

可見wm_concat後的順序並沒有按大->小,或小->大的順序。

測試2:

–參考網上一些解決思路

sql> select m,wm_concat(n)

2 from (select n,m from t order by m,n )

3 group by m;

m wm_concat(n)

———- ——————————————————————————–

1 0,11,10,1

2 2,17,12,7

3 3,15,13,5

5 6,16

可見順序問題還是沒有解決

最終解決思路:

sql> select m, max(r)

2 from (select m, wm_concat(n) over (partition by m order by n) r from t)

3 group by m ;

m max(r)

———- ——————————————————————————–

1 0,1,10,11

2 2,7,12,17

3 3,5,13,15

5 6,16

wm concat函式用法

在日常的資料查詢過程中,經常遇到一條資訊分多條記錄儲存,並以同乙個id關聯的情況,比如常見的房產證權利人資訊,因為共有權人可能有很多,不可能把所有的權利人都放到權利人表的權利人欄位,把所有權利人的證件號都放到權利人證件號字段,所以在資料庫設計時候,會採用乙個權利人一條記錄,並以權利id關聯的方式存放...

Oracle中的wm concat 函式

博主最近在學習使用oracle,前幾天寫 的時候有乙個任務,查詢到某一列的合併資料並且要求不能相同,我在網上查了查原來可以使用wm concat 這個函式來實現。一 wm concat 函式是oracle中獨有的,mysql中有乙個group concat 函式。這兩個函式的作用是相同的,它們的功能...

Oracle建立WM CONCAT函式

oracle建立wm concat函式 wm concat這個函式會出錯,所以從 11g開始。官方不認可 wm concat.然後就沒這個函式了,下面就是建立wm concat這個函式的步驟 用sqlplus登入 conn sys pass word as sysdba 一 忘記除sys syste...