Newsgroup: it.comp.lang.visual-basic
Titolo: SQL che non so risolvere...

Buongiorno a voi.
Ho due tabelle gemelle TabellaClienti e TabellaFornitori. In queste due 
tabelle
ho i campi Fornitore, Quantità e Prezzo che ovviamente produrranno un 
importo che potrebbe essere differente
nelle due tabelle.
Ciò vuol dire che potrei avere un set di record così impostato:
TabellaClienti
===========
Id_Record = 50
Fornitore = Pippo
Quantità = 10
Prezzo = 1,5
TabellaFornitori
===========
Id_Record = 50
Fornitore = Pippo
Quantità = 10
Prezzo = 1,6
Bene. Il mio obbiettivo è impostare una query che mi dia il differenziale 
del prodotto (quantità*prezzo)
estratto dalle due tabelle.Dal momento che ogni singola operazione viene 
scritta due volte (una in una
tabella e immediatamente nell'altra), potrei tenere come riferimento 
piuttosto che il nome del
fornitore l'ID del record. E fin qui ci sono. Suppongo che dovrei fare un 
join tra le tabelle ma
ho visionato diversi esempi da msdn e non riesco a correlarli con la mia 
esigenza.
A parte le scuse per la lunghezza del post...qualcuno potrebbe darmi una 
mano?
Grazie

Sembra che Marcella Santaluna abbia detto :

Se l'ID del record è per entrambe le tabelle chiave primaria univoca, 
puoi fare:
SELECT COALESCE(TC.FORNITORE,TF.FORNITORE,'---) AS FORNITORE,
DIFFERENZA=COALESCE(TC.QTA * TC.PREZZO , 0) - COALESCE(TF.QTA * 
TF.PREZZO , 0)
FROM TABELLACLIENTI AS TC
FULL OUTER JOIN TABELLAFORNITORI AS TF
ON TC.ID_RECORD=TF.ID_RECORD
ORDER BY COALESCE(TC.FORNITORE,TF.FORNITORE,'---)
Ciao
Alberto
-- 
Si è visto di meglio,
ma si è scopato di peggio,
qualche volta a pago
e non erano neanche sempre donne
[Paolo]

 ha scritto nel messaggio 
news:mn.5a537d5b5...@hotmail.com...

Albe, ti ringrazio. ei sempre straordinario! Ma già solo a guardarla sta 
stringa mi viene da piangere!!!
COALESCE??? e che è...se magna??
Vedrò prima di tutto di capirla...eh eh ...poi magari...la provo!!!!!
Bye
Marcella 

 COALESCE??? e che è...se magna??
E' l'equivalente standard dell'ISNULL.


>
Ok...il programma a prima vista mi risponde che c'è una parentesi in eccesso 
che invece io non scorgo.
Oltretutto, non capisco il significato di ,'---).
Albe...ti scoccio se ti chiedo di spiegarmi?
(Odiosa.)

Marcella Santaluna ha usato la sua tastiera per scrivere :

E' il terzo parametro di Coalesce.
Ma in effetti manca un apicino prima della parentesi.


 ha scritto nel messaggio 
news:mn.5a757d5b8...@hotmail.com...

SI??? E di quale parentesi?? 

 Ciao
...e scusa...malgrado lo metta in tuee e due '---') per intenderci
mi risponde errore di sintassi nella clausola from.
Grrrr 

 mi risponde errore di sintassi nella clausola from.
Che database stai utilizzando?
-- 
Salutoni
Sergio
Per rispondere... togli il group dall'indirizzo
Se i tempi non chiedono la tua parte migliore, inventa altri tempi. 
(Baolian, libro II, vv. 16-17)
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 Che database stai utilizzando?
Un normale access
(grazie) 

 
Albe V°.database.default.value = MS Sql Server
ciao
	maxx

 Albe V°.database.default.value = MS Sql Server
E non mi sento di dargli torto.


 Un normale access
Perchč, gli altri db sarebbero "anormali"?
Quisquilie a parte, la sintassi dello SQL supportato da access č diversa
da quella di SQL Server, che č quella utilizzata da Alberto.


 da quella di SQL Server, che č quella utilizzata da Alberto.
Ok...questo mi fa capire che ne avevo di tempo stando lě a provare
questa query...
la sintassi corretta per questa query in access invece? 

 la sintassi corretta per questa query in access invece?
Boh. Il COALESCE non l'ho mai usato, credo vada sostituito con un
iif(isnull(eccetera...
Proviamo...
SELECT iif(isnull(TC.FORNITORE),'---',TF.FORNITORE) AS FORNITORE,
DIFFERENZA=iif(isnull(TC.QTA),0,TC.QUA * TC.PREZZO , 0) -
iif(isnull(TF.QTA),0,TF.QUA * TF.PREZZO , 0)
FROM TABELLACLIENTI AS TC
INNER JOIN TABELLAFORNITORI AS TF
ON TC.ID_RECORD=TF.ID_RECORD
ORDER BY TC.FORNITORE
ma non ci metterei la mano sul fuoco.


 ma non ci metterei la mano sul fuoco.
Beh dai...nessun problema... adesso ho qualcosa su cui lavorare ed è già
tanto.
Vedremo a cosa mi porta il vostro (e tuo) suggerimento, poi si vedrà.
Grazie a voi
Marcella

Dopo dura riflessione, Marcella Santaluna ha scritto :

Purtroppo la sintassi che ti ho riportato è supportata dal 90% dei 
dbms, ma non da Access, che ha un mondo tutto suo per la sintassi Sql.


emmexx, venerdì alle 11.05.52, ha estratto dai neuroni:

Non proprio:
For Each Dbms in IT.Databases
    if Dbms.Type = DB_Use_ANSI_SQL then
        Albe_V.Databases.Add Dbms
    End If
Next Dbms


 Alberto
Si, immagino...e me pareva strano che io non facessi parte di quel 10 
percento...!!!
Ho provato la sintassi di Melchiade...
(nun me se fila de striscio...)
Grazie a tutti 

 (nun me se fila de striscio...)
Guarda, non sono intervenuto sul post di Melchiade perchè, a parte un 
utilizzo di IsNull che ricorda più VB che i dbms, mi sembrava potesse 
funzionare.
Secondo me se ci lavori attorno in poco riesci a fare ciò che ti serve.


 mano?
SELECT TC.QTA*TC.PREZZO AS PRODOTTO1, TF.QTA*TF.PREZZO AS PRODOTTO2, 
PRODOTTO2-PRODOTTO1 AS DIFFERENZA
FROM TC INNER JOIN TF ON TC.ID_RECORD = TF.ID_RECORD 

 ha scritto nel messaggio 
news:dl9ic0$ntn$1...@newsreader.mailgate.org...

Grazie infinite anche a Davide.
Dopo il post di Alberto mi sono scervellata di trovare una soluzione 
prendendo spunto
da tutti i vostri suggerimenti e sono arrivata alla medesima conclusione.
Vi ringrazio dal profondo del cuore per la collaborazione.
Marcella Santaluna