ma la query che hai postato è quella completa o la solita "semplificata" per venire incontro alle nostre ridotte capacità?
ma la query che hai postato è quella completa o la solita "semplificata" per venire incontro alle nostre ridotte capacità?
questa quella completa:
quella originale aveva la INNER JOIN al posto della LEFT.codice:SELECT negozio_npu, negozio_codice, negozio_ragsoc, SUM(rigord_qta), SUM(rigord_qta * rigord_prezzo) FROM tesord INNER JOIN rigord ON rigord_tesord_fk = tesord_id INNER JOIN articoli ON articolo_npam = rigord_articolo_fk LEFT OUTER JOIN st_negozi ON negozio_npu = tesord_de WHERE tesord_inviato = 1 AND tesord_annullato = 0 AND tesord_tipo = 'O' AND tesord_de IN(26721,24319,34586,34587,34611,27223,34620,34454,35347) AND articolo_codice = 'K190-347' GROUP BY negozio_npu ORDER BY negozio_ragsoc
quindi non cambia di molto rispetto a quella postata!
AND tesord_de IN(26721,24319,34586,34587,34611,27223,34620,34454 ,35347)
diventa
AND negozio_npu IN(26721,24319,34586,34587,34611,27223,34620,34454 ,35347)
AND tesord_de IN(26721,24319,34586,34587,34611,27223,34620,34454 ,35347)
diventa
AND negozio_npu IN(26721,24319,34586,34587,34611,27223,34620,34454 ,35347)
parti sempre dai negozi
ecco:
il risultato è sempre lo stesso, 5 records.codice:SELECT negozio_npu, negozio_codice, negozio_ragsoc, SUM(rigord_qta), SUM(rigord_qta * rigord_prezzo) FROM st_negozi LEFT OUTER JOIN tesord ON negozio_npu = tesord_de LEFT OUTER JOIN rigord ON rigord_tesord_fk = tesord_id LEFT OUTER JOIN articoli ON articolo_npam = rigord_articolo_fk WHERE tesord_inviato = 1 AND tesord_annullato = 0 AND tesord_tipo = 'O' AND negozio_npu IN(26721,24319,34586,34587,34611,27223,34620,34454 ,35347) AND articolo_codice = 'K190-347' GROUP BY negozio_npu ORDER BY negozio_ragsoc
quindi i 4 senza ordine non si vedono.
certo, perché fai delle WHERE su risultati che non ci saranno mai, tipo
tesord_inviato = 1
che dovrebbe invece essere
(tesord_inviato = 1 OR tesord_inviato IS NULL)
uhm ho provato anche facendo così come mi hai suggerito:
ma neanche cosi ha funzionato!codice:SELECT negozio_npu, negozio_codice, negozio_ragsoc, SUM(rigord_qta), SUM(rigord_qta * rigord_prezzo) FROM st_negozi LEFT OUTER JOIN tesord ON negozio_npu = tesord_de LEFT OUTER JOIN rigord ON rigord_tesord_fk = tesord_id LEFT OUTER JOIN articoli ON articolo_npam = rigord_articolo_fk WHERE (tesord_inviato = 1 OR tesord_inviato IS NULL) AND (tesord_annullato = 0 OR tesord_annullato IS NULL) AND (tesord_tipo = 'O' OR tesord_tipo IS NULL) AND negozio_npu IN(26721,24319,34586,34587,34611,27223,34620,34454 ,35347) AND articolo_codice = 'K190-347' GROUP BY negozio_npu ORDER BY negozio_ragsoc
vedo che su articolo_codice non l'hai applicato
si non ci avevo fatto caso:
adesso compare anche un record in più, con valori null.codice:SELECT negozio_npu, negozio_codice, negozio_ragsoc, SUM(rigord_qta), SUM(rigord_qta * rigord_prezzo) FROM st_negozi LEFT OUTER JOIN tesord ON negozio_npu = tesord_de LEFT OUTER JOIN rigord ON rigord_tesord_fk = tesord_id LEFT OUTER JOIN articoli ON articolo_npam = rigord_articolo_fk WHERE (tesord_inviato = 1 OR tesord_inviato IS NULL) AND (tesord_annullato = 0 OR tesord_annullato IS NULL) AND (tesord_tipo = 'O' OR tesord_tipo IS NULL) AND negozio_npu IN(26721,24319,34586,34587,34611,27223,34620,34454,35347) AND (articolo_codice = 'C190-016' OR articolo_codice IS NULL) GROUP BY negozio_npu ORDER BY negozio_ragsoc
però c'è cmq qualcosa di strano.
ho fatto altre prove con altri articoli, e mi escono sempre i records "corretti" più uno solo a NULL.
cioè, se sono tre a nulla (per esempio) ne esce sempre uno solo.
come se raggruppasse per valore (non so se mi sono spiegato).
referenzia i campi, come in questo esempio
SELECT C.nome, C.cognome FROM clienti C WHERE c.nome like 'a%' ...
così controlli l'assegnazione in caso di conflitti