Newsgroup: it.comp.lang.visual-basic
Titolo: [SQL] aiuto costruzione query

Ciao a tutti.
Mi sto scraniando pe costrurire una query SQL, ma si vede che sono troppo
abituato ai Select Case di VB...
Dunque, ho due tabelle in un db Access.
In una (Articoli) ho i seguenti campi: IDArticolo, PrimoPrezzo,
SecondoPrezzo, TerzoPrezzo, QuartoPrezzo.
Nell'altra (Ordini) ho questi campi: IDOrdine, IDArticolo, ListinoPrezzi
Il campo ListinoPrezzi contiene 1, 2, 3 o 4.
La query che sto cercando di costruire dovrebbe mostrare il campo prezzo
adeguato per ogni riga della tabella Ordini, leggendo dalla tabella Articoli
il campo relativo al listino inserito nel campo Listino. Cioè, per esempio,
se nella prima riga il listino è 1, nel campo Prezzo della query vorrei che
ci venisse scritto il contenuto del campo PrimoPrezzo di quell'articolo, se
nella seconda riga ci fosse scritto il listino 2, nel campo Prezzo ci
andrebbe il valore di SecondoPrezzo per quel determinato articolo, e così
via.
Per ora non sono nemmeno riuscito a creare una query di selezione che
indichi qual è il campo appropriato, che avrei potuto usare come base per la
costruzione della query definitiva.
Esempio:
ARTICOLI
IDArt Primo Secondo Terzo Quarto
----------+----------+----------+----------+----------+
1 15 18 22 17
2 17 14 23 18
3 19 17 12 21
ORDINI
IDOrdine Art Listino
----------+----------+----------+
1 1 2
2 1 3
3 2 1
4 2 2
5 2 4
6 1 4
7 3 2
8 3 4
Il risultato che vorrei ottenere dalla query è come segue:
IDOrdine Art Listino Prezzo
----------+----------+----------+----------+----------+
1 1 2 18
2 1 3 22
3 2 1 17
4 2 2 14
5 2 4 18
6 1 4 17
7 3 2 17
8 3 4 21
Spero di essere stato chiaro.
Sicuramente la domanda è già stata fatta in passato, ma non sono riuscito a
trovare alcun post in cui veniva spiegato come fare (...magari c'è da
cercare una particolare parola chiave di SQL?...)
Grazie a tutti in anticipo, leggerò con attenzione ogni commento.
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 costruzione della query definitiva.
Suggerimento: aggiungi alla lista dei campi di output della tua query di
selezione l'espressione seguente:
Choose(Listino, Articoli.Prezzo1, Articoli.Prezzo2, Articoli.Prezzo3,
Articoli.Prezzo4) AS Prezzo
Nota che però funziona solo con l'SQL di Access, in quanto Choose è una keyword
non standard.
Ciao
Raf

 Il campo ListinoPrezzi contiene 1, 2, 3 o 4.
[Taglio]
lPrezzo:
IIf([articoli].[pPrezzo]>0;[articoli].[pPrezzo];IIf([articoli].[sPrezzo]>0;[articoli].[sPrezzo];IIf([articoli].[tPrezzo]>0;[articoli].[tPrezzo];[articoli].[qPrezzo])))
Ave
giuseppeD
---
CCR
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it


IIf([articoli].[pPrezzo]>0;[articoli].[pPrezzo];IIf([articoli].[sPrezzo]>0;[articoli].[sPrezzo];IIf([articoli].[tPrezzo]>0;[articoli].[tPrezzo];[articoli].[qPrezzo])))
Grazie per la risposta Giuseppe, ma non mi va bene: non posso testare il
contenuto dei quattro campi prezzo, perché ho sempre un valore in tutti e
quattro. Devo scegliere quale leggere a seconda di cosa è scritto nel campo
Listino, ma tutti e quattro i campi contengono sempre dei valori, perché
quando inserisco un articolo nel db inserisco tutti e quattro i suoi prezzi.
Solo che quando lo vendo, a seconda dell'ordine lo vendo a un prezzo o a un
altro (agli amici lo vendo al prezzo scontato ;) ).



Mi andrebbe benissimo, perché devo creare la query soltanto per accodare dei
dati a una tabella, e poi distruggerla. Tra l'altro la tabella modificata mi
servirà successivamente per esportare i dati in un db SQLServer.
Comunque mi resta il dubbio di come avrei potuto fare direttamente in
SQLServer.
Ora sono fuori casa, appena torno a casa provo a scrivere il campo con
Choose. Poi ti faccio sapere.


 Choose. Poi ti faccio sapere.
Ciao
Raf

 END
(...senti senti, una specie di Select Case anche in SQL, chissà perché il
mio manualetto di SQL non lo menziona...)
Dunque, dopo essermici scraniato un po' per scansare i prodotti cartesiani
che continuavo ad ottenere, sono riuscito a far funzionare il Choose.
La query, in tutta la sua magnificenza è la seguente:
UPDATE DISTINCTROW (ART_ARTICOLI INNER JOIN DC2_RIGHECORPODOC
ON ART_ARTICOLI.ART_CODICE = DC2_RIGHECORPODOC.DC2_ARTICOLO_ART) LEFT JOIN
DC1_TESTATADOC
ON (DC2_RIGHECORPODOC.DC2_NUMERODOC_DC1 = DC1_TESTATADOC.DC1_NUMERODOC)
AND (DC2_RIGHECORPODOC.DC2_SERIE_DC1 = DC1_TESTATADOC.DC1_SERIE) AND
(DC2_RIGHECORPODOC.DC2_ANNO_DC1 = DC1_TESTATADOC.DC1_ANNO) AND
(DC2_RIGHECORPODOC.DC2_DITTA_DC1 = DC1_TESTATADOC.DC1_DITTA)
AND (DC2_RIGHECORPODOC.DC2_TIPO_DC1 = DC1_TESTATADOC.DC1_TIPO)
SET DC2_RIGHECORPODOC.DC2_PREZZO =
Choose([DC1_TESTATADOC].[DC1_LISTINO],[ART_ARTICOLI].[ART_PREZZO1],[ART_ARTICOLI].[ART_PREZZO2],[ART_ARTICOLI].[ART_PREZZO3],[ART_ARTICOLI].[ART_PREZZO4]);
Ora nella tabella di Access ci sono i miei bravi dati di esempio, e l'mdb è
pronto per essere importato di nuovo dentro SQLServer. Quando dovrò
interfacciarmici da VB sarà un'altra cosa.
Grazie per l'aiuto Raf, spero di poterti rendere il favore.
