数据库 表的嵌套 listagg函数

138 阅读1分钟
SELECT is_balance_payment,is_across,is_purchase_in_advance,purchasing_method,purchasing_method_scale,purchase_type,
purchase_method,reserve_share_type,reservation_method,reserved_proportion,only_for_small_and_micro_enterprises,reason,content,unit_price,
quantity,project_attribute,important_matters_type,project_overview,measure,viability,payment,* FROM 
	( SELECT TMP.*, ROWNUM ROW_ID FROM 
		( select A.org_id,A.uid,A.form_no,A.form_title ,A.adj_type, 
                        //   当adj_code==='minus'  输出'减少预算'  后面以此类推
				case when B.adj_code ='minus' then '减少预算' 
					when B.adj_code ='add' then '增加预算' 
					when B.adj_code ='new' then '新增项目' 
					else B.adj_code 
					end AS adj_code, 
				B.project_code,B.project_name,b.budget_code, b.budget_name,b.purchasing_method,b.adj_dept_name, B.project_detail_name,b.current_Project_Detail_Name_Money,B.request_Amount,
 				b.approved_Amount,b.request_content,b.remarks,A.effect_status,D.FORM_STATUS,D.AUDIT_STATUS,E.auditor_name,E.auditor_username,
 				C.quantity,C.is_purchase_in_advance,C.is_balance_payment,C.is_across,C.purchasing_method_scale,C.purchase_type,C.purchase_method,C.reserve_share_type,C.reservation_method,
 				C.reserved_proportion,C.only_for_small_and_micro_enterprises,C.reason,C.content,C.unit_price,C.project_attribute,C.important_matters_type,C.project_overview,
 				C.measure,C.viability,C.payment
		 from bgt_appform A join bgt_appform_detail b on a.org_id = b.org_id and a.uid = b.master_uid join bgt_budget_allocate_detail C 
 		 on b.project_detail_id = c.uid LEFT JOIN document_status d ON A.UID = D.FORM_ID LEFT JOIN 
 			( SELECT FORM_Id,listagg(auditor_name,',') within group(order by auditor_name) as auditor_name, listagg(auditor_username,',') 
 				within group(order by auditor_username) as auditor_username from flow_pending group by FORM_Id
 			) E ON A.UID=E.FORM_ID 
 				WHERE a.org_id ='151d1261223611ea8657fa163e857333' AND A.yyyy='2023' and A.form_type_code ='SC_DZ_SQ' order by form_no 
 		) TMP 
		 WHERE ROWNUM <=100
 	) WHERE ROW_ID > 0
listagg函数 基于group by 后面的字段来合并
select  姓名, listagg(手机号,',')
    within group (order by 姓名) 手机号
    from PersonInFo
    where 姓名='李四'
    group by 姓名;

image.png