Ciao a tutti;
ho ereditato un applicativo che effetua un'estrazione movimenti da un db oracle e propone la visualizzazione in 2 formati differenti.
Le query che dovrebbero essere equivalenti hanno però una differenza sostanziale, ossia la seconda effettua una sorta di "distinct" non ben specificata, in quanto per movimenti identici in tutto e per tutto, ne tira fuori solo uno, mentre la prima query li mostra tutti.
Mi aiutate ad inquadrare la parte di codice colpevole di questa sorta di distinct?
Per completezza e per confronto posto entrambe le query:
--STANDARD
codice:select cc.id_fondo||' '||cc.divisa as conto, 'B' as tipo, mb.nr_conto as conto_banca, '' as null1, mb.segno_importo||mb.importo as importo, to_char(to_date(mb.data_contabile, 'dd/mm/rrrr'), 'rrrrmmdd') as data_contabile, to_char(to_date(mb.data_valuta, 'dd/mm/rrrr'), 'rrrrmmdd') as data_valuta, mb.id_causale_banca as causale, mb.codice_isin, '' as fiche, mb.flag_domino as stringa, '' as null2, '' as null3, replace(replace(mb.descrizione, chr(10), '_'), chr(13), '_') as descrizione, case when instr(commento, '<?_') <> 0 then replace(replace(substr(commento, instr(commento, '<?_')+13), chr(10), '_'), chr(13), '_') else replace(replace(commento, chr(10), '_'), chr(13), '_') end as commento, case when flag_domino is not null then 'SI' else 'NO' end as stringatura from movimentobanca mb, contocontabilita cc, bancacontabilita bc where bc.nr_conto = mb.nr_conto and bc.divisa = mb.divisa and bc.abi = mb.abi and bc.nr_conto_contab = cc.nr_conto and flag_stato = 'A' and to_date(mb.DATA_CONTABILE, 'dd/mm/rrrr') <= to_date('23/04/2013','dd/mm/rrrr') and ( ( bc.nr_conto = '123456789' and bc.abi = '01234' and bc.divisa = 'JPY' ) ) union select cc.id_fondo||' '||cc.divisa as conto, 'A' as tipo, bc.nr_conto as conto_banca, '' as null1, mc.segno_importo||mc.importo as importo, to_char(to_date(mc.data_contabile, 'dd/mm/rrrr'), 'rrrrmmdd') as data_contabile, to_char(to_date(mc.data_valuta, 'dd/mm/rrrr'), 'rrrrmmdd') as data_valuta, mc.id_causale_contab as causale, mc.codice_isin, mc.fiche, mc.flag_domino as stringa, '' as null2, '' as null3, replace(replace(mc.descrizione, chr(10), '_'), chr(13), '_') as descrizione, case when instr(commento, '<?_') <> 0 then replace(replace(substr(commento, instr(commento, '<?_')+13), chr(10), '_'), chr(13), '_') else replace(replace(commento, chr(10), '_'), chr(13), '_') end as commento, case when flag_domino is not null then 'SI' else 'NO' end as stringatura from movimentocontabilita mc, contocontabilita cc, bancacontabilita bc where mc.nr_conto = cc.nr_conto and cc.nr_conto = bc.nr_conto_contab and mc.flag_stato in ('A','C') and to_date(mc.DATA_CONTABILE, 'dd/mm/rrrr') <= to_date('23/04/2013','dd/mm/rrrr') and ( ( bc.nr_conto = 'I123456789' and bc.abi = '01234' and bc.divisa = 'JPY' ) )
--ACC. COMP
codice:select cc.id_fondo||' '||cc.divisa as conto, 'B' as tipo, mb.nr_conto as conto_banca, '' as null1, mb.segno_importo||mb.importo as importo, to_char(to_date(mb.data_contabile, 'dd/mm/rrrr'), 'rrrrmmdd') as data_contabile, to_char(to_date(mb.data_valuta, 'dd/mm/rrrr'), 'rrrrmmdd') as data_valuta, mb.id_causale_banca as causale, mb.codice_isin, '' as fiche, mb.flag_domino as stringa, '' as null2, '' as null3, replace(replace(mb.descrizione, chr(10), '_'), chr(13), '_') as descrizione, case when instr(commento, '<?_') <> 0 then replace(replace(substr(commento, instr(commento, '<?_')+13), chr(10), '_'), chr(13), '_') else replace(replace(commento, chr(10), '_'), chr(13), '_') end as commento, case when flag_domino is not null then 'SI' else 'NO' end as stringatura from movimentobanca mb, contocontabilita cc, bancacontabilita bc where bc.nr_conto = mb.nr_conto and bc.divisa = mb.divisa and bc.abi = mb.abi and bc.nr_conto_contab = cc.nr_conto and flag_stato = 'A' and to_date(mb.DATA_CONTABILE, 'dd/mm/rrrr') <= to_date('23/04/2013','dd/mm/rrrr') and ( ( bc.nr_conto = '123456789' and bc.abi = '01234' and bc.divisa = 'JPY' ) ) union select cc.id_fondo||' '||cc.divisa as conto, 'A' as tipo, bc.nr_conto as conto_banca, '' as null1,mc.segno_importo||mc.importo as importo, to_char(to_date(mc.data_contabile, 'dd/mm/rrrr'), 'rrrrmmdd') as data_contabile, to_char(to_date(mc.data_valuta, 'dd/mm/rrrr'), 'rrrrmmdd') as data_valuta, mc.id_causale_contab as causale, mc.codice_isin, mc.fiche, mc.flag_domino as stringa, '' as null2, '' as null3, replace(replace(mc.descrizione, chr(10), '_'), chr(13), '_') as descrizione, case when instr(commento, '<?_') <> 0 then replace(replace(substr(commento, instr(commento, '<?_')+13), chr(10), '_'), chr(13), '_') else replace(replace(commento, chr(10), '_'), chr(13), '_') end as commento, case when flag_domino is not null then 'SI' else 'NO' end as stringatura from movimentocontabilita mc, contocontabilita cc, bancacontabilita bc where mc.nr_conto = cc.nr_conto and cc.nr_conto = bc.nr_conto_contab and mc.flag_stato in ('A','C') and to_date(mc.DATA_CONTABILE, 'dd/mm/rrrr') <= to_date('23/04/2013','dd/mm/rrrr') and ( ( bc.nr_conto = '123456789' and bc.abi = '01234' and bc.divisa = 'JPY' ) )

Rispondi quotando