joinConvert bug fix
sqlparser opened this issue · 1 comments
sqlparser commented
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
sqlparser commented
需要修复的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
的引用会出错。