日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

数据库实现列值合并为行

發(fā)布時間:2024/4/14 数据库 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据库实现列值合并为行 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

轉載自:http://hi.baidu.com/wangzhiqing999/blog/item/40982215996caa62cb80c46e.html

?

CREATE TABLE TestTitle (
? name?? VARCHAR(10),
? seq??? INT,
? title? VARCHAR(10)
);

?

INSERT INTO TestTitle VALUES ('張三', 3, '程序員');
INSERT INTO TestTitle VALUES ('張三', 1, '系統(tǒng)管理員');
INSERT INTO TestTitle VALUES ('張三', 2, '網絡管理員');

INSERT INTO TestTitle VALUES ('李四', 2, '項目經理');
INSERT INTO TestTitle VALUES ('李四', 1, '系統(tǒng)分析員');

?

這里要求 是, 合并后, 字符的順序,是按照? seq? 來排序的

也就是最后的結果,希望是

李四???? 系統(tǒng)分析員,項目經理

張三???? 系統(tǒng)管理員,網絡管理員,程序員

?

?

?

對于MySQL使用?GROUP_CONCAT 函數?的方式進行處理

?首先是 不排序的情況下,默認的查詢結果:

?

?

mysql> SELECT
??? ->?? name,
??? ->?? GROUP_CONCAT(title) AS allTitle
??? -> FROM
??? ->?? TestTitle
??? -> GROUP BY
??? ->?? name;
+------+------------------------------+
| name | allTitle???????????????????? |
+------+------------------------------+
| 李四 | 項目經理,系統(tǒng)分析員????????? |
| 張三 | 程序員,系統(tǒng)管理員,網絡管理員 |
+------+------------------------------+
2 rows in set (0.00 sec)

?

然后是按照?seq?? 的順序進行排列的查詢結果:

mysql> SELECT
??? ->?? name,
??? ->?? GROUP_CONCAT(title) AS allTitle
??? -> FROM
??? ->?? (
??? ->?? SELECT
??? ->???? name,
??? ->???? title
??? ->?? FROM
??? ->???? TestTitle
??? ->?? ORDER BY
??? ->???? seq
??? ->?? ) as subQuery
??? -> GROUP BY
??? ->?? name;
+------+------------------------------+
| name | allTitle???????????????????? |
+------+------------------------------+
| 李四 | 系統(tǒng)分析員,項目經理????????? |
| 張三 | 系統(tǒng)管理員,網絡管理員,程序員 |
+------+------------------------------+
2 rows in set (0.00 sec)

?

?

?

對于Oracle使用?WMSYS.WM_CONCAT 函數?的方式進行處理

?

首先是 不排序的情況下,默認的查詢結果:

SQL>
SQL> SELECT
? 2??? name,
? 3??? WMSYS.WM_CONCAT(title) AS allTitle
? 4? FROM
? 5??? TestTitle
? 6? GROUP BY
? 7??? name;

NAME
----------
ALLTITLE
-------------------------------------------
李四
項目經理,系統(tǒng)分析員

張三
程序員,系統(tǒng)管理員,網絡管理員


?

然后是按照?seq?? 的順序進行排列的查詢結果:

SQL> with myCTE AS
? 2? (
? 3??? SELECT
? 4????? name,
? 5????? seq,
? 6????? WMSYS.WM_CONCAT(title)
? 7????????? OVER(PARTITION BY? name?? ORDER BY?? seq) AS allTitle
? 8??? FROM
? 9????? TestTitle
?10? )
?11? SELECT
?12??? name, allTitle
?13? FROM
?14??? myCTE
?15? WHERE
?16??? NOT EXISTS(
?17????? SELECT 1
?18????? FROM myCTE sub
?19????? WHERE myCTE.name = sub.name
?20??????? AND myCTE.seq < sub.seq
?21??? );

NAME
----------
ALLTITLE
--------------------------------------------------------------
李四
系統(tǒng)分析員,項目經理

張三
系統(tǒng)管理員,網絡管理員,程序員


?

select from ipms_case,(select case_id ,ltrim(sys_connect_by_path(name, '$@$'), '$@$') as name ,ltrim(sys_connect_by_path(SERVER_HOSTING_ADDRESS, '$@$'), '$@$') as SERVER_HOSTING_ADDRESS ,ltrim(sys_connect_by_path(ICP_REC_NUM , '$@$'), '$@$') as ICP_REC_NUM ,ltrim(sys_connect_by_path(ICP_REG_ADDR, '$@$'), '$@$') as ICP_REG_ADDR,ltrim(sys_connect_by_path(HOME_WEB_URL, '$@$'), '$@$') as HOME_WEB_URL ,ltrim(sys_connect_by_path(IP_ADDR, '$@$'), '$@$') as IP_ADDR from (select asso.case_id as case_id,site.NAME as name,site.SERVER_HOSTING_ADDRESS as SERVER_HOSTING_ADDRESS,site.ICP_REC_NUM as ICP_REC_NUM ,site.ICP_REG_ADDR as ICP_REG_ADDR,site.HOME_WEB_URL as HOME_WEB_URL,site.IP_ADDR as IP_ADDR,(row_number() over(partition by asso.case_id order by asso.case_id) ) numid from IPMS_CASE_SITE_ASSO asso,ipms_website sitewhere asso.SITE_ID=site.id )start with numid = 1 connect by numid - 1 = prior numid and case_id = prior case_id )

?

總結

以上是生活随笔為你收集整理的数据库实现列值合并为行的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。