Newsgroup: it.comp.lang.visual-basic
Titolo: SQL: è possibile fare una query così ??

Ciao a tutti
Confesso subito che non solo non so come fare: non so neanche dove cercare
(Google) per trovare qualche indicazione!! Quindi, qualsiasi indicazione mi
va benissimo e ve ne sarò grato!
Io sto cercando di creare una cosa del genere: ho una tabella "Invoices"
(fatture) ed una tabella "Payments" (pagamenti della fattura xxx),
ovviamente collegate tra loro.
La tabella Invoices ha questi campi:
IDInvoice ID univoco fattura
InvoiceAmt Importo fattura
IDProblem F.K. verso una tabella (ProblemTypes) che indica l'ultimo
"problema" che ha portato un ritardo
(+ altri ...)
La tabella pagamenti, invece: 
IDPayment ID Univoco pagamento
IDInvoice F.K. tabella Invoices
Amount Quantità pagata
Io dovrei realizzare una query che ricavi questi campi:
- IDInvoice
- tante colonne quante sono i record di ProblemTypes, che indichi il
totale pagato per ogni fattura e per il problema relativo
..spero di essermi spiegato. Faccio un esempio, di quello che voglio
ottenere:
IDInvoice ProblemaA ProblemaB ProblemaC
1 10.200 0 0
2 0 32.251 0
3 5.450 0 0
4 0 0 10.200
E' possibile, in SQL, fare una cosa del genere?
Ciao
Marco
P.S. Dimenticavo: lavoro in Access, ma dovrei tra poco migrare tutto su
SQL server
-- 
-----------------------------------
"A strange game. The only winning move is not to play"
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 ha scritto nel messaggio
news:cuqh5h$mr1$1...@news.newsland.it...

Sperando che MN sia la sigla di Mantova...!!!
Credo che potresti provare conl'autocomposizione di Access a generare
una Query a campi incrociati.
E' decisamente semplice il Wizard.
Ciao
-- 
@Alex (Alessandro Baraldi)
---------------------------------------------------------------------------
http://www.sitocomune.com/
http://www.mantuanet.it/alessandro.baraldi/
---------------------------------------------------------------------------

 una Query a campi incrociati.
Sì: adeso ci provo. L'unico problema è che dovrei presto (molto presto...)
passare a SQL Server, e quindi dovrei fare la query il più possibile
"portabile"... 
Grazie della risposta
Marco (<- questa è la M  :D )


Per fare una cosa simile in Access
devi usare TRANSFORM e PIVOT.
Non so se in SqlServer non ho provato se esiste una sintassi simile.
In Oracle non ci sono riuscito pur provandoci.
La sintassi in Acces dovrebbe essere quella seguente (uso il
condizionale perchè non l'ho provata):
TRANSFORM IDProblem
SELECT
IDInvoice
FROM Invoices 
GROUP BY IDInvoice
PIVOT IDProblem;

 [...]
Se volete la mia opinione, pivotare i record in campi va contro la
filosofia su cui si fonda il concetto di database e la soluzione va
cercata altrove.
termoPilucco
-- 


"portabile"... 
L'unico modo che hai per fare queries portabili è:
- dimenticare i parametri
- dimenticare gli order by
In questo modo, e se non mi sono dimenticato nulla, potrai
riutilizzare il tutto per fare viste logiche.
Il fatto è che quando arriverai a SQLServer o a un altro DBMS, ti
renderai conto della potenza delle stored procedure, e ti chiederai
come hai fatto a farne a meno fino a quel momento.
--
Ciao!
Luca Menegotto

cercata altrove.
Al di la che posso essere d'accordo, visto che non ne ho mai sentito
il bisogno, tocca a me fare la domanda idiota del giorno: riuscite a
spiegarmi in due parole in che consiste il pivoting?
Faccio doverosamente presente che non uso Excell...
--
Ciao!
Luca Menegotto

spiegarmi in due parole in che consiste il pivoting?
Non ho mai usato le autocomposizioni o clausole "pivot" nelle query, ma tiro a
indovinare che si tratta di "ruotare" una tabella in modo che i record divengano
campi.
Un offesa mortale alle regole di normalizzazione dei DB, insomma :)
D'altra parte si tratta di una "vista" sui dati, per cui ci potrebbe anche stare
in casi eccezionali.
termoPilucco

 termoPilucco
Andrea