sql學習積累 將查詢結果行轉列

2021-08-31 16:10:15 字數 2256 閱讀 1218

wmsys.

wm_concat

(gljs)

wmsys.wm_concat 主要功能是將查詢結果行轉列,每行結果用』,'分割

針對表中存在一對多關係時,可以用一條結果展示關係為一的結果資訊,例如訂單表

如果要獲取訂單表t_user_order表(表結構自己腦補)中使用者a的所有訂單,結果需要一行展示

select uo.name,wmsys.wm_concat(order_id) from t_user_order

使用者訂單a

訂單id1,訂單id2,訂單id3………

用此方法進行行專列時會存在轉換後列結果長度過長報錯的問題!!!

rtrim

(xmlagg

(xmlelement(e

,menu.name ||

'、')).

extract

('//text()').

getclobval()

,'、'

)

此方法可以避免轉換後長度過長報錯問題;因為此方法是將結果轉為clob,對長度沒什麼限制。而且可以自定義分隔符

對oracle裡字段生成xml語句,其中e定義的為xml節點名,後面的為表中欄位名。

這樣就生成了clob格式的xml語句

select

xmlelement

("emp"

,xmlelement

("name"

, e.job_id||

' '||e.last_name)

,xmlelement

("hiredate"

, e.hire_date))as

"result"

from employees e

where employee_id >

200;

查詢結果為:

mk_man hartstein<

/name>

2004-02

-17<

/hiredate>

<

/emp>

xmlagg是乙個聚合函式。它採用xml片段的集合並返回聚合的xml文件。從結果中刪除任何返回null的引數。

select

xmlelement

("department"

,xmlagg

(xmlelement

("employee"

, e.job_id||

' '||e.last_name)

order

by last_name))as

"dept_list"

from employees e

where e.department_id =30;

查詢結果

----

----

----

----

----

----

----

----

----

----

----

----

----

----

----

-pu_clerk baida<

/employee>

pu_clerk colmenares<

/employee>

pu_clerk himuro<

/employee>

pu_clerk khoo<

/employee>

pu_man raphaely<

/employee>

pu_clerk tobias<

/employee>

<

/department>

oracle提供對xml檔案的檢索功能(extractvalue),extractvalue只能返回乙個節點的乙個值

如果想查詢所有subfield的值就要用到extract(),它可以返回乙個節點下的所有值。

用來讀取xml

sql查詢行轉列

昨天下午碰到乙個需求,乙個大約30萬行的表,其中有很多重複行,在這些行中某些字段值是不重複的。比如有id,name,contract id,sales,product等,除了product欄位,其餘欄位均是一樣的,需要去重並合併product欄位。下午頭腦發昏,直接寫了個o nm 的vba 從16 ...

用sql語句將行轉列

表結構和內容 insert into test val1,val2 values name wd insert into test val1,val2 values email jon wd 163.com insert into test val1,val2 values age 30 sql語句...

mysql 查詢行轉列 SQL語句實現行轉列查詢

表sales 查詢結果如下 1 建表 create table dbo sales id int identity 1,1 not null,year int null,jidu int null,jine int null,primary key clustered id asc with pad...