ma come fai a indirizzare c1 nella query esterna? casomai sarà valori_conta...
ma come fai a indirizzare c1 nella query esterna? casomai sarà valori_conta...
non ti dà errore quella query?
Ci sono quasi , mi manca solo l'ultimo passaggio
Lo dovrei avere il join left solo sui valori con lo stasso magazzino perchè al momento mi li sta mettendo in qualunque riga dove trova lo stesso codice_materialecodice:SELECT `valori_conta`.`magazzino`, s.magazzino as magazzino_sap, `valori_conta`.`codice_materiale`, `valori_conta`.`numero_conta`, `valori_conta`.`unita_misura`, s.codice_materiale as codice_sap, `s`.`valore_totale_sap`, `s`.`valore_singolo_sap`, `s`.`quantita_sap`, valori_conta.quantita_totale from sap_dati_ricevuti s LEFT JOIN( SELECT c1.magazzino, c1.codice_materiale, c1.numero_conta, c1.unita_misura, sum(c1.quantita) as quantita_totale FROM conta_materiale c1 JOIN ( SELECT max(id) id, max(numero_conta) FROM conta_materiale GROUP BY magazzino, codice_materiale ) c2 ON c1.id = c2.id WHERE c1.id_inventario = '4' GROUP BY c1.codice_materiale, c1.magazzino, c1.numero_conta, c1.unita_misura ) valori_conta on s.codice_materiale = valori_conta.codice_materiale
Inolltre mi sono accorto che non somma quantità totale di conta come dovrebbe
Ultima modifica di pippuccio76; 18-11-2022 a 12:50
aggiungi nella JOIN il magazzino come vincolo
SELECT campi FROM t1 JOIN t2 ON t1.campo1=t2.campo1 AND t1.campo2=t2.campo2 ....
Ci siamo quasi :
manca che esegua le somme correttamente che devono essere fatte per numero_conta e per codice_materialecodice:SELECT `valori_conta`.`magazzino`, `valori_conta`.`codice_materiale`, `valori_conta`.`numero_conta`, `valori_conta`.`unita_misura`, s.codice_materiale as codice_sap, `s`.`valore_totale_sap`, `s`.`valore_singolo_sap`, `s`.`quantita_sap`, s.magazzino as magazzino_sap, valori_conta.quantita_totale from sap_dati_ricevuti s LEFT JOIN( SELECT c1.magazzino, c1.codice_materiale, c1.numero_conta, c1.unita_misura, sum(c1.quantita) as quantita_totale FROM conta_materiale c1 JOIN ( SELECT max(id) id, max(numero_conta) FROM conta_materiale GROUP BY magazzino, codice_materiale ) c2 ON c1.id = c2.id WHERE c1.id_inventario = '4' GROUP BY c1.codice_materiale, c1.magazzino, c1.numero_conta, c1.unita_misura ) valori_conta on s.codice_materiale = valori_conta.codice_materiale AND valori_conta.magazzino = s.magazzino
allora devi lasciare solo numero_conta e per codice_materiale nella GROUP BY della query che fa le somme
Scusa anche magazzino potrebbe servirmi perchè lo stesso codice potrebbe esssere in più magazzini quindi tolgo solo l unità di misura ?
Fatta così :
codice:SELECT `valori_conta`.`magazzino`, `valori_conta`.`codice_materiale`, `valori_conta`.`numero_conta`, `s`.`unita_misura`, s.codice_materiale as codice_sap, `s`.`valore_totale_sap`, `s`.`valore_singolo_sap`, `s`.`quantita_sap`, valori_conta.quantita_totale from sap_dati_ricevuti s LEFT JOIN( SELECT c1.magazzino, c1.codice_materiale, c1.numero_conta, sum(c1.quantita) as quantita_totale FROM conta_materiale c1 JOIN ( SELECT max(id) id, max(numero_conta) FROM conta_materiale GROUP BY magazzino, codice_materiale ) c2 ON c1.id = c2.id WHERE c1.id_inventario = '4' GROUP BY c1.codice_materiale, c1.magazzino, c1.numero_conta ) valori_conta on s.codice_materiale = valori_conta.codice_materiale And valori_conta.magazzino = s.magazzino
Ma i conti non tornano , sembra che come quantita totale prenda solo una riga senza fare il sum
perché nella group by ci sono troppi elementi: non dovevano essere due?
Come ti dicevo lo stesso codice_materiale potrebbe essere in più magazzini quindi deve sommare la quantita contata dello stesso codice , della stessa conta e dello stesso magazzino .
pippuccio, mi hai detto due cose diverse, ma comunque nessun problema: nella group by metti tutti gli elementi che ti servono per raggruppare
se poi i conti non tornano ti chiederei di fare un esempio con dei dati su cui poter ragionare