參考:
業務場景:
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...