ORACLE列值合併,oracle列
合併列值最通用的方法就是寫一個自定義函數去實現,這裏介紹的是其他方法。
在SQL Server中合併列值可以使用For Xml Path,在Oracle中則可以使用wm_concat 或 ListAgg。
準備數據:
CREATE TABLE MyTest(xType NUMBER,City nvarchar2(200));/INSERT INTO MyTest(xType,City)SELECT 1,N'北京' FROM dual UNION ALLSELECT 1,N'上海' FROM dual UNION ALLSELECT 1,N'廣州' FROM dual UNION ALLSELECT 2,N'武漢' FROM dual UNION ALLSELECT 2,N'杭州' FROM dual UNION ALLSELECT 2,N'廈門' FROM dualCOMMIT;/
使用wm_Concat:
SELECT xType,wmsys.wm_concat(to_char(City)) AS xCityFROM MyTestGROUP BY xType
使用ListAgg:
SELECT xType, ListAgg(to_char(City),',') WITHIN GROUP(ORDER BY xType) AS xCityFROM MyTestGROUP BY xType
結果:
XTYPE XCITY
---------- --------------------------------------
1 北京,廣州,上海
2 杭州,武漢,廈門
備註:
0、上面在City列前都加了To_Char()函數,是為了防止出現亂碼的情況;
1、wm_concat 在ORACEL的官方文檔中沒有,不能保證各版本的相容性;
2、ListAgg是11g版本才出現的新的聚集函數。
oracle語句中怎把一列的值合并為一個值,用逗號隔開?
所有版本的oracle都可以使用select wm_concat(name) as name from user;
但如果是oracle11g,使用select listagg(name, ',') within group( order by name) as name from user;
效率更高,官方也更推薦這種寫法。
oracle 將兩列合并
單純的select a||b肯定是錯的,你得有個相同的欄位才能進行合并啊
所以你得把兩個表做個子查詢加上一個行號,然後用兩個行號做關聯才行