Newsgroup: it.comp.lang.visual-basic
Titolo: [SQL] Mi date un aiutone ?

Grazie di aver aperto questo messaggio.
Dunque, il mio problema è questo, ho diverse tabelle (diciamo 3 per il
momento) che hanno la stessa struttura e QUASI gli stessi dati.
Immaginiamo una cosa di questo genere:
tab 1	tab 2	tab 3
-----	-----	-----
A|10	A|7	A|1
B|2	B|8	B|18
C|31	C|12	C|3
a me servirebbero due query, una che raggruppi i valori massimi:
Qry 1
-----
A|10
B|18
C|31
e una per i valori minimi:
Qry2
-----
A|1
B|2
C|3
...ovviamente "attingendoli" dalle tre tabelle. E' possibile ?
Grazie in anticipo ! ;-)
                |
              -@-
             /   \
            / @ \  
          / @@  \ 
        /  Buone  \ 
      / @ feste @ \
    /*****************\
               | |
Wolf
L8Max(r) ...il massimo per il Lotto !
http://www.dreamlink.net/L8max
wol...@dreamlink.net
[Attenzione: indirizzo e-mail alterato per evitare spammings.
Togliere '007' per contattarmi.]
-------------------------------
Wolf è contro la TUT (Tariffa Urbana a Tempo)
Visitate e supportate 
http://notut.ml.org
 

ciao, sono iacono giancarlo , 
g_ia...@hotmail.com
secondo me, visto che devi trattare dati di diverse tabelle, devi usare la
medesima query su tutte e tre e poi trovi il max o il min a seconda di
quello che ti serve:
ex
 queri="select indice_posizione, min(valore) as minvalore from tabella1"
data1.recordsource=queri
data1.refresh
dove indice_posizione rappresenta il numero assegnato al record della
tabella (se non c'è usa il campo che tu usi come campo chiave) mentre
valore è il valore di cui tu vuoi sapere il massimo.
Ripeti la query per le tre tabelle e trova il massimo.
La sintessi della stringa sembra strana ma dovrebbe funzionare
Ciao!











Wolf,
Non e' chiaro che DB stai usando: se usi Access sei costretto a fare una
query di unione tra tab1, tab2 e tab3 e poi elaborarla con una seconda
query.
se invece usi SQL server puoi anche fare tutto con una sola SQL:
Select Max(U.A) as MaxA, MAx(U.B) as MaxB, Max(U.C) as MaxC, Min(U.A) as
MinA, Min(U.B) as MinB, Min(U.C) as MinC
 From
(Select A,B,C
 From Tab1
Union All
Select A,B,C
 From Tab2
Union All
Select A,B,C
 From Tab3) As U
ciao ciao,
Alessandro Scardova
scar...@tin.it
http://space.tin.it/computer/ascardov/


ha scritto:

No, scusa, forse ho espresso male il problema. A me serve di estrarre
TUTTI i record delle tabelle (nell'esempio i campi A,B,C), ma ad
ognuno di loro attribuire il valore massimo (o minimo) riscontrabile
nelle tre tabelle "incrociate"
Grazie comunque della risposta ;-)



I valori massimi di che?
di ciascuna tabella?
Può servire allora
SELECT Max(Tabella1.C2) AS Max, First(Tabella1.C1 ) AS TC1
FROM Tabella1
UNION
SELECT Max(Tabella2.C2) AS Max, First(Tabella2.C1 ) AS TC1
FROM Tabella2
UNION SELECT Max(Tabella3.C2) AS Max, First(Tabella3.C1 ) AS TC1
FROM Tabella3;
ma evidentemente non è così perchè in tal caso i tuoi risultati sarebbero
C|31
C|12
B|18
Oppure i primi tre valori derivanti dall'unione delle tre tabelle, nel qual
caso verrebbe
C|31
B|18
C|12
Forse tu intendi il max tra i primi record delle tre tabelle, il max tra i
secondi record e
così via???
In tal caso forse ti conviene considerare di usare istruzioni VB e non SQL.
del tipo
Option Compare Database
Option Explicit
Sub normale()
Dim t As Recordset
Dim u As Recordset
Dim v As Recordset
Dim z As Recordset
Dim w
    Set t = CurrentDb.OpenRecordset("Tabella1")
    Set u = CurrentDb.OpenRecordset("Tabella2")
    Set v = CurrentDb.OpenRecordset("Tabella3")
    Set z = CurrentDb.OpenRecordset("Risultati")
    t.MoveFirst
    If z.RecordCount > 0 Then z.MoveFirst
    Do While Not t.EOF
     If z.RecordCount > 0 Then z.Edit
     z.AddNew
     z(0) = t(0)
     z(1) = Massimo(t(1), u(1), v(1))
     z.Update
     t.MoveNext
     u.MoveNext
     v.MoveNext
    Loop
End Sub
Function Massimo(a&, b&, c&) As Integer
    Massimo = max(max(a&, b&), max(b&, c&))
End Function
Function max(a&, b&) As Integer
    If a& > b& Then max = a& Else max = b&
End Function

Provo a decodificare
Sì, hai ragione, mi sono reso conto di aver dato per scontata una
logica che invece è molto "contorta" :-)
Proviamo a semplificare riprendendo le tabelle di esempio
tab 1 	tab 2 	tab 3
----- 	----- 	-----
A|10 	A|7 	A|1
B|2 	B|8 	B|18
C|31 	C|12 	C|3
Allora, le tabelle hanno tre record ciascuna, ma potrebbero essere 30
o 300, il numero dei record è SEMPRE uguale per le tre tabelle, così
come i valori contenuti nel primo campo (A,B,C, etc) sono sempre
uguali e univoci. L'unica cosa che varia sono i valori nel secondo
campo (i numeri). A 'sto punto io devo chiedere al programma "fammi
vedere TUTTI i record (A,B,C,...), ed estrai per ognuno di loro il
valore massimo, 'pescando' dalle tre tabelle", ovvero:
Qry 1
-----
A|10
B|18
C|31
...e così via...
Spero di essermi spiegato meglio, stavolta :-))
Grazie
