sqlparser/gsp_demo_java

joinConvert bug fix

sqlparser opened this issue · 1 comments

https://github.com/sqlparser/gsp_demo_java/tree/master/src/main/java/demos/joinConvert

SQL Server

	SELECT @id_proceso, ppc.id_pv, ppc.cod_aseg, ppc.nro_cuota
	, convert(VARCHAR, mag.cod_tipo_agente) + ' ' + convert(VARCHAR, mag.cod_agente) + ' - ' + mag.txt_cheque_a_nom corredor
	, tr.txt_desc_redu ramo
	, ph.nro_pol poliza
	, min(ph.fec_emi) emision
	, min(ph.fec_vig_desde) vigencia
	, mh.txt_nom_factura contratante
	, mhp.txt_nom_factura pagador
    --smontenegro_20140818_ini
	/*, (	SELECT tc.txt_desc_cond
		FROM mpersona_conducto mpc, tconducto tc
		WHERE mpc.id_persona = mhp.id_persona
		AND mpc.ind_conducto = pp.ind_conducto
		AND tc.cod_conducto = mpc.cod_conducto) conducto*/
    ,tc.txt_desc_cond as conducto    
    --smontenegro_20140818_fin
    /*Cambia el rango de morosidad JG 24/02/2017*/        
	, sum(CASE WHEN datediff(day, ppc.fec_venc, @fec_corte) < 0 THEN ppc.imp_premio_me ELSE 0 END) por_vencer
	, sum(CASE WHEN datediff(day, ppc.fec_venc, @fec_corte) BETWEEN 0 AND 31 THEN ppc.imp_premio_me ELSE 0 END) dias_30
	, sum(CASE WHEN datediff(day, ppc.fec_venc, @fec_corte) BETWEEN 32 AND 61 THEN ppc.imp_premio_me ELSE 0 END) dias_60
	, sum(CASE WHEN datediff(day, ppc.fec_venc, @fec_corte) BETWEEN 62 AND 90 THEN ppc.imp_premio_me ELSE 0 END) dias_90
	, sum(CASE WHEN datediff(day, ppc.fec_venc, @fec_corte) >= 91 THEN ppc.imp_premio_me ELSE 0 END) dias_120
	, sum(ppc.imp_premio_me) total, 0,/*bfierro */ tsuc.txt_nom_suc, convert(VARCHAR, mag.cod_agente), mag.txt_cheque_a_nom corredor,nro_dia_cobro
	FROM maseg_header mh, 
         magente mag, 
         pv_header ph, 
         tramo tr, 
         maseg_header mhp, 
         pv_pagador pp, 
         pv_pagador_cuota ppc
         --smontenegro_20140818_ini
         ,mpersona_conducto mpc
         ,tconducto tc
         --smontenegro_20140818_fin
         --bfierro ini
         ,tsuc 
         --bfierrofin
         
	WHERE mhp.cod_aseg 		= ppc.cod_aseg
	AND pp.id_pv 			= ppc.id_pv 
	AND pp.cod_aseg 		= ppc.cod_aseg
	AND ph.id_pv 			= ppc.id_pv 
	AND mh.cod_aseg 		= ph.cod_aseg 
	AND tr.cod_ramo 		= ph.cod_ramo 
	AND mag.cod_tipo_agente = ph.cod_tipo_agente 
	AND mag.cod_agente 		= ph.cod_agente 
	AND ph.cod_suc          = tsuc.cod_suc --bfierro
	AND ph.cod_suc 			= isnull(@cod_suc, ph.cod_suc)
	AND ph.cod_ramo 		= isnull(@cod_ramo, ph.cod_ramo)
	AND ph.cod_aseg 		= isnull(@cod_contratante, ph.cod_aseg)
	AND ph.cod_tipo_agente 	= isnull(@cod_tipo_agente, ph.cod_tipo_agente)
	AND ph.cod_agente 		= isnull(@cod_agente, ph.cod_agente)
	AND ppc.cod_aseg 		= isnull(@cod_pagador, ppc.cod_aseg)
	AND ppc.cod_estado 		in (1,3)
    --smontenegro_20140818_ini
    AND mhp.id_persona   *= mpc.id_persona
    AND pp.ind_conducto  *= mpc.ind_conducto
	AND tc.cod_conducto   = pp.cod_conducto
    AND tc.cod_conducto   = isnull(@cod_conducto, tc.cod_conducto)
    --smontenegro_20140818_fin    
	GROUP BY mag.cod_tipo_agente
	, mag.cod_agente
	, mag.txt_cheque_a_nom
	, tr.txt_desc_redu
	, ph.nro_pol 
	, mh.txt_nom_factura
	, mhp.txt_nom_factura
	, mhp.id_persona 
	, pp.ind_conducto
    --smontenegro_20140818_ini
    ,tc.txt_desc_cond
     --smontenegro_20140818_fin
    , ppc.id_pv
    , ppc.cod_aseg
    , ppc.nro_cuota
    , tsuc.txt_nom_suc
    ,nro_dia_cobro

转换以后的SQL

SELECT @id_proceso, ppc.id_pv, ppc.cod_aseg, ppc.nro_cuota
	, convert(VARCHAR, mag.cod_tipo_agente) + ' ' + convert(VARCHAR, mag.cod_agente) + ' - ' + mag.txt_cheque_a_nom corredor
	, tr.txt_desc_redu ramo
	, ph.nro_pol poliza
	, min(ph.fec_emi) emision
	, min(ph.fec_vig_desde) vigencia
	, mh.txt_nom_factura contratante
	, mhp.txt_nom_factura pagador
    --smontenegro_20140818_ini
	/*, (	SELECT tc.txt_desc_cond
		FROM mpersona_conducto mpc, tconducto tc
		WHERE mpc.id_persona = mhp.id_persona
		AND mpc.ind_conducto = pp.ind_conducto
		AND tc.cod_conducto = mpc.cod_conducto) conducto*/
    ,tc.txt_desc_cond as conducto    
    --smontenegro_20140818_fin
    /*Cambia el rango de morosidad JG 24/02/2017*/        
	, sum(CASE WHEN datediff(day, ppc.fec_venc, @fec_corte) < 0 THEN ppc.imp_premio_me ELSE 0 END) por_vencer
	, sum(CASE WHEN datediff(day, ppc.fec_venc, @fec_corte) BETWEEN 0 AND 31 THEN ppc.imp_premio_me ELSE 0 END) dias_30
	, sum(CASE WHEN datediff(day, ppc.fec_venc, @fec_corte) BETWEEN 32 AND 61 THEN ppc.imp_premio_me ELSE 0 END) dias_60
	, sum(CASE WHEN datediff(day, ppc.fec_venc, @fec_corte) BETWEEN 62 AND 90 THEN ppc.imp_premio_me ELSE 0 END) dias_90
	, sum(CASE WHEN datediff(day, ppc.fec_venc, @fec_corte) >= 91 THEN ppc.imp_premio_me ELSE 0 END) dias_120
	, sum(ppc.imp_premio_me) total, 0,/*bfierro */ tsuc.txt_nom_suc, convert(VARCHAR, mag.cod_agente), mag.txt_cheque_a_nom corredor,nro_dia_cobro
	FROM maseg_header mh
inner join pv_header ph on mh.cod_aseg 		= ph.cod_aseg
inner join magente mag on mag.cod_tipo_agente = ph.cod_tipo_agente and mag.cod_agente 		= ph.cod_agente
inner join tramo tr on tr.cod_ramo 		= ph.cod_ramo
inner join pv_pagador_cuota ppc on ph.id_pv 			= ppc.id_pv
inner join maseg_header mhp on mhp.cod_aseg 		= ppc.cod_aseg
inner join pv_pagador pp on pp.id_pv 			= ppc.id_pv and pp.cod_aseg 		= ppc.cod_aseg and pp.ind_conducto  = mpc.ind_conducto
left outer join mpersona_conducto mpc on mhp.id_persona   = mpc.id_persona
inner join tconducto tc on tc.cod_conducto   = pp.cod_conducto
inner join tsuc on ph.cod_suc          = tsuc.cod_suc
         --smontenegro_20140818_ini
         --smontenegro_20140818_fin
         --bfierro ini
         --bfierrofin
	WHERE ph.cod_suc 			= isnull(@cod_suc, ph.cod_suc)
	AND ph.cod_ramo 		= isnull(@cod_ramo, ph.cod_ramo)
	AND ph.cod_aseg 		= isnull(@cod_contratante, ph.cod_aseg)
	AND ph.cod_tipo_agente 	= isnull(@cod_tipo_agente, ph.cod_tipo_agente)
	AND ph.cod_agente 		= isnull(@cod_agente, ph.cod_agente)
	AND ppc.cod_aseg 		= isnull(@cod_pagador, ppc.cod_aseg)
	AND ppc.cod_estado 		in (1,3)
    --smontenegro_20140818_ini
    AND tc.cod_conducto   = isnull(@cod_conducto, tc.cod_conducto)
    --smontenegro_20140818_fin    
	GROUP BY mag.cod_tipo_agente
	, mag.cod_agente
	, mag.txt_cheque_a_nom
	, tr.txt_desc_redu
	, ph.nro_pol 
	, mh.txt_nom_factura
	, mhp.txt_nom_factura
	, mhp.id_persona 
	, pp.ind_conducto
    --smontenegro_20140818_ini
    ,tc.txt_desc_cond
     --smontenegro_20140818_fin
    , ppc.id_pv
    , ppc.cod_aseg
    , ppc.nro_cuota
    , tsuc.txt_nom_suc
    ,nro_dia_cobro

需要修复的bug

left outer join mpersona_conducto mpc on mhp.id_persona   = mpc.id_persona

应该放在

inner join pv_pagador pp on pp.id_pv 			= ppc.id_pv and pp.cod_aseg 		= ppc.cod_aseg and pp.ind_conducto  = mpc.ind_conducto

前,否则 mpc的引用会出错。