oracle 列值合併

2021-09-26 10:31:59 字數 1567 閱讀 5776

參考:

業務場景:

t_train(火車票訂單表)

t_trainpassenger(火車票乘客資訊表)

一對多的關係

我們需要查訂單列表,其中乙個展示的列是乘客姓名(乙個訂單多個人時,名字用逗號隔開),並且可以通過乘客姓名模糊查詢訂單列表,如果不做列值合併,則會出現三條訂單記錄,而只有名字不同,這不是我們所要的結果,當然你可以在程式中處理,相對較為麻煩,通過以下sql中

listagg函式即可實現列值合併.

select

distinct

t.id as id,

t.c_ordernumber as cordernumber,

t.c_agentid as cagentid,

t.c_ordertype as cordertype,

t.c_outno as coutno,

t.c_traincode as ctraincode,

listagg(p.c_name, ',')within group( order by p.c_name)over (partition by t.c_ordernumber) as cname,

t.c_starttime as cstarttime,

t.c_startcity as cstartcity,

t.c_endcity as cendcity,

t.c_totalprice as ctotalprice,

t.c_createtime as ccreatetime,

t.c_orderstatus as corderstatus,

t.c_kdcode as ckdcode,

t.c_paystatus as cpaystatus,

t.c_deliverytype as cdeliverytype

from

t_train t,

t_trainpassenger p

t.id = p.c_orderid

and t.c_ordernumber like '%$%'

and t.c_agentid = #

and t.c_outno like '%$%'

and

t.c_ordernumber in(select t2.c_ordernumber from t_train t2 left join t_trainpassenger p2 on t2.id=p2.c_orderid where p2.c_name like '%$%')

and t.c_traincode = #

and t.c_paystatus = #

and t.c_ordertype = #

and t.c_orderstatus = #

and t.c_createtime >= to_date('$','yyyy-mm-dd hh24:mi:ss')

and t.c_createtime <= to_date('$','yyyy-mm-dd hh24:mi:ss')

order by t.c_createtime desc

Oracle合併多行為多列

oracle 如何聚合多行函式 在bea論壇上看一位 專家 寫的大作,一條sql語句是 select r.xm,substr r.csrq,1,4 年 substr r.csrq,5,2 月 substr r.csrq,7,2 日 csrq,select dictvalue from zh dict...

Oracle合併多行為多列

oracle 如何聚合多行函式 在bea論壇上看一位 專家 寫的大作,一條sql語句是 select r.xm,substr r.csrq,1,4 年 substr r.csrq,5,2 月 substr r.csrq,7,2 日 csrq,select dictvalue from zh dict...

oracle中多行合併成列

今天碰到乙個問題,a表與b表一對多,b表與c表一對多的關係,a表的主鍵是b表的外來鍵,b表的主鍵是c表的外來鍵。現在要查,a表所對應的c表的記錄 兩種方案 一 以c表的需要字段作為主要的方面去查a表所對應的記錄 select td.devid,td.devname,cai.title from co...