Newsgroup: it.comp.appl.access
Titolo: Query che usa dati da un'altra query.

La prima query "qElGiu1" è:
SELECT DISTINCT tCostiXLiv.Giu
FROM tCostiXLiv;
mentre la seconda "qElGiu2" è:
SELECT DISTINCT Sum(1) AS n, t1.Giu
FROM qElGiu1 AS t1 INNER JOIN qElGiu1 AS t2 ON t1.Giu>=t2.Giu
GROUP BY t1.Giu
ORDER BY t1.Giu;
e mi servono per avere un elenco numerato dei diversi valori di Giu,
che è un campo di testo, senza ripetizioni.
Si tratta di un esempio banale che mi dà modo di chiedere se per caso
non ci sia modo di nidificare le query, una bestemmia del tipo:
SELECT DISTINCT Sum(1) AS n, t1.Giu
FROM (SELECT DISTINCT tCostiXLiv.Giu FROM tCostiXLiv;) AS t1
INNER JOIN (SELECT DISTINCT tCostiXLiv.Giu FROM tCostiXLiv;) AS t2
ON t1.Giu>=t2.Giu
GROUP BY t1.Giu
ORDER BY t1.Giu;
che ovviamente non mi funziona.
Se poi devo essere scomunicato, pazienza.
Grazie a tutti.
Riccardo Baldinotti


La correlazione la puoi ottenere inserendo all'interno della subquery 
con una where utilizzando gli alias del tipo:
Select Distinct
     T1.Giu, T1.QuelloChetpare
FROM tCostiXLiv As T1
Where
     T1.Giu < (Select SoloUnCampo From  tCostiXLiv As T2 Where 
T2.ID
 < > 
= 
T1.ID
)
-- 
Daniele
Rispondere scartando OneEDP, spam e 32

 ...
Se capisco bene, puoi provarlo così:
SELECT DISTINCT
  (SELECT COUNT(*) FROM
      (SELECT DISTINCT Giu FROM tCostiXLiv) AS T2
        WHERE T2.Giu <= T1.Giu) AS n
  , T1.Giu
FROM tCostiXLiv AS T1
ORDER BY T1.Giu
-- 
Ciao
Karl
*********
Access FAQ:  
http://www.donkarl.com/it
 


...e naturalmente funziona, grazie mille.
Ma la cosa buffa è che anche la mia:
SELECT DISTINCT Sum(1) AS n, t1.Giu
FROM (SELECT DISTINCT tCostiXLiv.Giu FROM tCostiXLiv;) AS t1
INNER JOIN (SELECT DISTINCT tCostiXLiv.Giu FROM tCostiXLiv;) AS t2
ON t1.Giu>=t2.Giu
GROUP BY t1.Giu
ORDER BY t1.Giu;
adesso funziona: forse avevo fatto un errore a scriverla, ma è
comunque meno "elegante".
A questo punto chiedo: fra le tre soluzioni (le due query, la query
Karl, la query Riccardo) ci possono essere differenze di prestazioni?
Per esempio: nella soluzione a due query, mi pare che la prima sia
eseguita due volte.
Nel mio caso è un batter di ciglia, ma forse casi più complessi
potrebbero dare differenze, o no?
Per quanto riguarda la proposta di OneEDP, la tabella tCostiXLiv non
ha un campo id e ho modificato così:
Select Distinct
     Sum(1) AS n, t1.Giu
FROM tCostiXLiv As T1
Where
     T1.Giu < (Select Giu From  tCostiXLiv As T2 Where T2.Giu <=
T1.Giu)
ma avevo l'errore "impossibile eseguire una query che non include
l'espressione 'Giu' come parte di una funzione di aggregazione".
Al che, aggiungendo:
GROUP BY t1.Giu;
ottengo:
"la sottoquery può restituire al massimo un record".
Ancora grazie.
Riccardo Baldinotti

 Riccardo Baldinotti
Select Distinct
      Sum(1) AS n, t1.Giu
FROM tCostiXLiv As T1
Where
      T1.Giu<  (Select Min o Max (T2.Giu) From  tCostiXLiv As T2 Where T2.Giu<=
T1.Giu)
group by t1.giu


 ...
In genere le sottoquery in Access/JET sono lente.
Soprattutto con molti record spesso č piů veloce di usare
due query separate o una funzione come DLookUp/DCount ecc.
invece di una sottoquery. (v.a.  
www.donkarl.com/it?FAQ3.11
)
-- 
Ciao
Karl
*********
Access FAQ:  
www.donkarl.com/it
 

 Riccardo Baldinotti
