Join che duplica valori

martedì 22 aprile 2008 - 18.48

albedo Profilo | Junior Member

Ciao, ragzzi

SELECT SUM(VENDITE.COLLI) as colli , VENDITE.FORNITORE as for, CARICHI.CARICO FROM VENDITE LEFT JOIN CARICHI ON CARICHI.ID_FOR = VENDITE.ID_FOR WHERE VENDITE.ARTICOLO = 'MARTELLO' GROUP BY VENDITE.FORNITORE, CARICHI.CARICO"

Questa query mi restituisce i valori duplicat e non riesco a capire perché, vi assicuor che ho cercato sul forum una possibile soluzione, ma non ne ho trovate, ho pensato che deve essere talmente semplice che a nessuno è mai sorto un problema simile.

Il risutato corretto dovrebbe essere

colli fornitore
2 MARCELLO
5 NANDO
6 UGO
.
Invece mi restituisce:

colli fornitore

alx_81 Profilo | Guru

>Ciao, ragzzi
ciao!
>
>SELECT SUM(VENDITE.COLLI) as colli , VENDITE.FORNITORE as for,
>CARICHI.CARICO FROM VENDITE LEFT JOIN CARICHI ON CARICHI.ID_FOR
>= VENDITE.ID_FOR WHERE VENDITE.ARTICOLO = 'MARTELLO' GROUP BY
>VENDITE.FORNITORE, CARICHI.CARICO"
>
>Questa query mi restituisce i valori duplicat e non riesco a
>capire perché, vi assicuor che ho cercato sul forum una possibile
>soluzione, ma non ne ho trovate, ho pensato che deve essere talmente
>semplice che a nessuno è mai sorto un problema simile.
>
>Il risutato corretto dovrebbe essere
>
>colli fornitore
>2 MARCELLO
>5 NANDO
>6 UGO
Non può esserlo, nella select includi anche il carico e poi quindi sei costretto a raggruppare anche per quel campo oltre che per il fornitore.
Hai i valori non duplicati, n-uplicati, poichè a parità di fornitori puoi avere più carichi. Elimina il campo CARICHI.CARICO sia nella SELECT che nella GROUP BY.
ciao!
Alx81 =)

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

albedo Profilo | Junior Member

>>Ciao, ragzzi
>ciao!
>>
>>SELECT SUM(VENDITE.COLLI) as colli , VENDITE.FORNITORE as for,
>>CARICHI.CARICO FROM VENDITE LEFT JOIN CARICHI ON CARICHI.ID_FOR
>>= VENDITE.ID_FOR WHERE VENDITE.ARTICOLO = 'MARTELLO' GROUP BY
>>VENDITE.FORNITORE, CARICHI.CARICO"
>>
>>Questa query mi restituisce i valori duplicat e non riesco a
>>capire perché, vi assicuor che ho cercato sul forum una possibile
>>soluzione, ma non ne ho trovate, ho pensato che deve essere talmente
>>semplice che a nessuno è mai sorto un problema simile.
>>
>>Il risutato corretto dovrebbe essere
>>
>>colli fornitore
>>2 MARCELLO
>>5 NANDO
>>6 UGO
>Non può esserlo, nella select includi anche il carico e poi quindi
>sei costretto a raggruppare anche per quel campo oltre che per
>il fornitore.
>Hai i valori non duplicati, n-uplicati, poichè a parità di fornitori
>puoi avere più carichi. Elimina il campo CARICHI.CARICO sia nella
>SELECT che nella GROUP BY.
>ciao!
>Alx81 =)
>
>http://www.alessandroalpi.net
>http://blogs.dotnethell.it/suxstellino
>http://mvp.support.microsoft.com/profile/Alessandro.Alpi
>http://italy.mvps.org

Ciao Alx81,

Sei un raggio di luce in questio mondo di tenebre che per me è l'SQL

Ovviamente, la query così come l'hai suggerita tu funziona alla perfezione, ma io ho omesso di dire che quella query dovrebbe restituirmi anche il valore del campo 'CARICO' della tabella 'CARICHI'.

IN pratica vorrei creare uan datatable che contenga i campi: FORNITORE, CARICO E SUM(COLLI) in cui fornitore e somma dei colli dovrebbero essere prelevati dalla tabella vendite ed il valore del campo CARICO dalla tabella CARICHI.

Ogni fornitore può avere più di un articolo caricato, così, idealmente se il fornitore MARCELLO oggi ha in carico 10 MARTELLO e 10 CHIAVI ed ha venduto un totale di 3 MARTELLO, la queri dovrebbe restituirmi questi valori:

FORNITORE VENDUTI CARICO ARTICOLO

MARCELLO 3 10 MARTELLO
MARCELLO 0 10 CHIAVI

Spero si una cosa fattibile.

Ciao

e grazie di nuovo

alx_81 Profilo | Guru

>Ovviamente, la query così come l'hai suggerita tu funziona alla
>perfezione, ma io ho omesso di dire che quella query dovrebbe
>restituirmi anche il valore del campo 'CARICO' della tabella
>'CARICHI'.
I valori vengono n-uplicati nella tua query perchè evidentemente, a parità di fornitore, hai più carichi..
Di conseguenza, raggruppando, ottieni record distinti. Quale carico ti serve per fornitore? Ti basterebbe un'altra funzione di aggregazione (ad esempio una MAX). Ma prima di tutto, è corretto che tu abbia carichi diversi per un fornitore?

>e grazie di nuovo
di nulla!
Alx81 =)

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

albedo Profilo | Junior Member

>I valori vengono n-uplicati nella tua query perchè evidentemente,
>a parità di fornitore, hai più carichi..
>Di conseguenza, raggruppando, ottieni record distinti. Quale
>carico ti serve per fornitore? Ti basterebbe un'altra funzione
>di aggregazione (ad esempio una MAX). Ma prima di tutto, è corretto
>che tu abbia carichi diversi per un fornitore?
>
>>e grazie di nuovo
>di nulla!
>Alx81 =)
>
>http://www.alessandroalpi.net
>http://blogs.dotnethell.it/suxstellino
>http://mvp.support.microsoft.com/profile/Alessandro.Alpi
>http://italy.mvps.org

Sì, è corretto: un solo fornitore può avere carichi diversi di articoli diversi nella stessa giornata

Ciao

alx_81 Profilo | Guru

>Sì, è corretto: un solo fornitore può avere carichi diversi di
>articoli diversi nella stessa giornata
Allora devi per forza scegliere quali degli n carichi vuoi vedere (il massimo, il minimo, la media, ecc).. altrimenti tutto viene n-uplicato..
Se non puoi, devi omettere il carico.. Se il carico è diverso, ovviamente avrai n righe a parità di Fornitore e Articolo..
Alx81 =)

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5