Newsgroup: it.comp.programmare
Titolo: una query facile facile

                             Problema:
Devo ottenere un RecordSet con un solo Record,
i campi devono contenere il totale della condizione Where.
Mi spiego meglio:
Una tabella Anagrafe con campi; [nome] [data-di-nascita]
se eseguo la sub.....
Private Sub ETA()
Dim rst As Recordset, oggi As Date
oggi = Date
'''''''''''''''''''' Under20 '''''''''
    Under20 = Format(DateAdd("yyyy", -20, oggi), "m/d/yy")
    Q = "Select *From [Anagrafe] Where [Data di nascita] > #" & Under20 &
"#;"
    Set rst = DB.OpenRecordset(Q)
    If rst.RecordCount > 0 Then rst.MoveLast
    Under20 = rst.RecordCount
'''''''''''' Upper40 '''''''''
    Upper40 = Format(DateAdd("yyyy", -40, oggi), "m/d/yy")
    Q = "Select *From [Anagrafe] Where [Data di nascita] < #" & Upper40 &
"#;"
    Set rst = DB.OpenRecordset(Q)
    If rst.RecordCount > 0 Then rst.MoveLast
    Upper40 = rst.RecordCount
''''''''''''To2040 '''''''''
Q = "Select * From [Anagrafe] Where [Data di nascita] Between #" & Under20 &
"# And #" & Upper40 & "#;"
    Set rst = DB.OpenRecordset(Q)
    If rst.RecordCount > 0 Then rst.MoveLast
   To2040 = rst.RecordCount
'''''''''''''''''''''''''''''''''''''''''
End Sub
Ottengo lo scopo ma non nel modo giusto perchè devo aprire 3 RecordSet.
praticamente...
Private Sub ETA()
Dim rst As Recordset
    Under20 = Format(DateAdd("yyyy", -20, oggi), "m/d/yy")
    Q = "Select Count([Data di nascita]) As Under20 From [Anagrafe] Where
[Data di nascita] > #" & Under20 & "#;"
    Set Data1.Recordset = DB.OpenRecordset(Q)
    With Data1.Recordset
        If .RecordCount > 0 Then .MoveLast: .MoveFirst
    End With
End Sub
x una sola condizione va bene x 3 NO ?
-------------IN POCHE PAROLE,UNA QUERY DEL GENERE
    Under20 = Format(DateAdd("yyyy", -20, oggi), "m/d/yy")
    Upper40 = Format(DateAdd("yyyy", -40, oggi), "m/d/yy")
Q = "Select " & _
    "Count([Data di nascita]) As Under20," & _
    "Count([Data di nascita]) As Upper40," & _
    "Count([Data di nascita]) As To2040 " & _
    "From [Anagrafe]" & _
    "Where [Data di nascita] > #" & Under20 & _
    ",Where [Data di nascita] < #" & Upper40 & _
    ",Where [Data di nascita] Between #" & Under20 & "# And #" & Upper40 &
"#;"
 COME VA SCRITTA ?
Grazie

  COME VA SCRITTA ?
Se l'RDBMS che usi rispetta gli standard (SQL92 e simili),
SELECT COUNT(*) FROM Anagrafe GROUP BY
    CASE WHEN Datanascita < Under20 THEN 1
        WHEN Datanascita > Under40 THEN 3
        ELSE 2
    END
l'idea base e` avere un GROUP BY su di una colonna sintetica dei tre
casi che ti interessano.  A standard puoi ottenere la colonna sintetica
con il suddetto CASE/WHEN.  Se il tuo DB supporta GROUP BY solo
con nomi di colonna dovrai dare un nome a questa e piazzarla fra il
select e il from: 
SELECT COUNT(*), CASE WHEN ... END AS code GROUP BY code
Se il tuo DB non supporta CASE/WHEN e` probabile che offra una
qualche funzione non-standard per esprimere "se questo allora x
altrimenti y".  Ad esempio CASE e` buggato in varie versoni di MySQL, ma 
c'e` una funzione nonstandard IF(cond,x,y) che puoi usare al suo posto:
SELECT COUNT(*), IF(Datanascita<20,1,IF(Datanascita<40,2,3)) AS code
        GROUP BY code
e questa dovrebbe funzionare in quasi tutti i MySql che trovi in giro. Ecc, 
ecc.  E` un peccato che non basti dare la risposta basata sull'SQL standard
ma 10 anni dopo la promulgazione di SQL92 non tutti lo hanno ancora
implementato pienamente ... (!).
Alex