データベースで列の値を行に統合します。
3873 ワード
自己転載:http://hi.baidu.com/wangzhiqing999/blog/item/40982215996caa62cb80c46e.html CREATE TABLE TestTitle( name VRCHAR(10)、 seq INT、 title VRCHAR(10) INSERT INTO TestTitle VALES('張三',3''プログラマ')INSERT INTO TestTitle VALES('張三',1,'システム管理者')INSERT INTO TestTitle VALES('張三',2,'ネットワーク管理者')INSERT INTO TestTitle VALES('李四',2''プロジェクトマネージャー')INSERT INTO TestTitle VALES('李四',1,'システムアナライザ') ここでは、統合後の文字の順番は、 seq 並べ替えに来たのはつまり最後の結果です。李四さんがほしいです。 システムアナライザ、プロジェクトマネージャー張三 システム管理者 MySQLに使用する GROUT_CONCAT関数 の方式で処理します。 最初に並べ替えがない場合、デフォルトのクエリー結果: mysql>SELECT -> name -> GROUT_CONCAT AS allTitle -> FROM -> TestTitle -> GROUTP BY -> name;+-------------------------------------------------|name 124 allTitle |+------+------------------------------+| 李四|プロジェクトマネージャー、システムアナライザ || 張三|プログラマー、システム管理者、ネットワーク管理者(----------------------------------------------+2ローws in set(0.00 sec) そして seq の順に並べられたアンケート結果:mysql>SELECT -> name -> GROUT_CONCAT AS allTitle -> FROM -> ( -> SELECT -> name -> title -> FROM -> TestTitle -> ORDER BY -> seq -> ) as subQuery -> GROUTP BY -> name;+-------------------------------------------------name|allTitle |+------+------------------------------+| 李四|システムアナライザ、プロジェクトマネージャー || 張三|システム管理者、ネットワーク管理者、プログラマー(--------------------------------------+2ローws in set(0.00 sec) Oracleに対して使用する WMSYS.WMUCONCAT関数 の方式で処理します。 まず、並べ替えがない場合、デフォルトの照会結果:SQL>SQL>SELECT 2 name 3 WMSYS.WMUCONCAT AS allTitle 4 FROM 5 TestTitle 6 GROUTP BY 7 name;NAME----------------------------------李四プロジェクトマネージャー、システムアナライザ張三プログラマ、システム管理者、ネットワーク管理者 そして seq SQL>with mysCTE AS 2 ( 3 SELECT 4 name 5 seq 6 WMSYS.WMUCONCAT(title) 7 OVER(PARTTION 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 mysCTE.name=sub.name 20 AND myCTE.seq<sub.seq 21 ); NAME--------------------------------------------李四システムアナライザ、プロジェクトマネージャ張三システム管理者、ネットワーク管理者、プログラマ
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 site
where asso.SITE_ID=site.id
)
start with numid = 1
connect by numid - 1 = prior numid and case_id = prior case_id
)