Newsgroup: it.comp.appl.access
Titolo: Un errore su una query SQL che non riesco a capire

sulla scorta di un recentissimo trread a cui ho tentato di rispondere
https://groups.google.com/forum/?hl=it#!topic/it.comp.appl.access/WLJ_sUMfuOk
 
 
mi è sorto un dubbio che non mi lascia dormire ........
Non si tratta di un problema contingente,  bensi di una questione di puntiglio....
 
 
Punto 1°)  Immaginiamo di avere una semplicissima tabella di nome "Tab"
con 2 soli campi:  ( per lo scopo non sono necessari indici )
- Stato - Testo - ( rappresenta il nome di uno Stato )
- Citta - Testo - ( Rappresenta il nome di una Citta )  ( senza accento )
 
-- Stato ------------ Citta ------
- Francia ---------- Parigi ------
- Germania --------- Berlino -----
- Italia ----------- Roma --------
- Francia ---------- Lione -------
- Germania --------- Monaco ------
 
 
Punto 2°) Vogliamo senza ausilio di VBA arrivare a una query che dia questo risultato
--- Stato ------------- n1 -------------- n2 ------
- Francia ----------- Lione ----------- Parigi ----
- Germania ---------- Berlino --------- Monaco ----
- Italia ------------ Roma --
 
 
Punto 3°)  Quindi comincio a creare una query che mi numera progressivamente 
le citta per ogni Stato e la chiamiamo "Q03"
[code]
    SELECT 
    X.Stato, 
    X.Citta, 
    "n" & DCount("Tab.Citta","Tab","((Tab.Stato='" & [Stato] & "') AND (Tab.Citta<='" & [Citta] & "'))") AS NCit
    FROM 
    Tab AS X
    ;
[/code]
 
Ottengo questo
-- Stato ------------ Citta -------- NCit ----
- Francia ---------- Parigi --------- n2 -----
- Germania --------- Berlino -------- n1 -----
- Italia ----------- Roma ----------- n1 -----
- Francia ---------- Lione ---------- n1 -----
- Germania --------- Monaco --------- n2 -----
 
Punto 4°) poi faccio una query a campi incrociati ( Chiamiamola Q05 ) che contenga 
- Stato nella Intestazione Riga
- NCit nella intestazione Colonna
- Citta nel Valore
[code]
    TRANSFORM Max(Q03.Citta) AS MaxC
    SELECT Q03.Stato
    FROM Q03
    GROUP BY Q03.Stato
    PIVOT Q03.NCit
    ;
[/code]
Ottenendo appunto il risultato che mi ero prefissato al Punto 2°
 
E fino a qui va tutto benissimo !!!!!!
 
 
 
Il problema si pone se al Punto 3° ( query Q03 ) sostituisco il DCount(.....) con una sottoquery
 
quindi esattamente questa riga 
    "n" & DCount("Tab.Citta","Tab","((Tab.Stato='" & [Stato] & "') AND (Tab.Citta<='" & [Citta] & "'))") AS NCit
 
la modifico cosi:
    "n" & (SELECT Count(Tab.Citta) AS ccc FROM Tab WHERE ((Tab.Stato=X.Stato) AND (Tab.Citta<=X.Citta));) AS NCit
 
Succede che Q03 continua ad aprirsi regolarmente e restituisce dei risultati identici
Mentre Q05 mi va in errore dicendo che ...........
"Il motore di Access non riconosce "X.Stato" come espressione o nome di campo ...."
 
Qualcuno riesce a immaginare il motivo ????  Grazie
 
.

devi usare un alias anche per X.stato

Purtroppo il problema non sta negli Allias
 
Comunque ho aggiunto tutti gli allias del mondo
ho rifatto la Q03 in questo modo
[code]
SELECT 
X.Stato AS stax, 
X.Citta AS citx, 
"n" & DCount("Tab.Citta","Tab","((Tab.Stato='" & [Stato] & "') AND (Tab.Citta<='" & [Citta] & "'))") AS NCit
FROM 
Tab AS X
;
[/code]
 
per conseguenza Q05 è diventata cosi
[code]
TRANSFORM Max(Q03.citx) AS MaxC
SELECT Q03.stax
FROM Q03
GROUP BY Q03.stax
PIVOT Q03.NCit
;
[/code]
 
 
ma se in Q03 al posto del 
"n" & DCount(..............) AS NCit
metto la sottoquery tutta "Alliassata"
"n" & (SELECT Count(Y.Citta) AS ccc FROM Tab AS Y WHERE ((Y.Stato=X.Stato) AND (Y.Citta<=X.Citta));) AS NCit
il problema permane
 
.
 

nella where no.....

Ok,   non nella WHERE.
 
Quindi dove mi consigli di usare l'allias ??

le subquery vogliono i riferimenti allaquery principale tramite alias. quindi x.stato nn lo riconosce ....

 Qualcuno riesce a immaginare il motivo ????
 
Direi che il motivo � lo stesso come descritto nell'articolo
http://www.donkarl.com/it?FAQ3.18
 o anche nel kb
http://support.microsoft.com/kb/209778/it
 
Solo che la cura (definire un parametro) non funziona per un alias.
 
-- 
Ciao
Karl
*********
Access FAQ:  
http://www.donkarl.com/it
 
 
 


Pardon non avevo notato la qry pivot, ma solo la subquery

Grazie Karl e Fair
 
Ci studio sopra
 
.