Newsgroup: it.comp.appl.access
Titolo: Query e sottoquery.

Salve!
Forse sono rincotto, ma non riesco a fare una cosa.
Ho creato una query, Query1.
Ho creato un'altra query, basandola su Query1.
E funziona.
E' possibile ottenere lo stesso risultato tramite l'SQL, un qualcosa del
tipo
SELECT * FROM (SELECT Cognome, Nome FROM Anagrafica)
(la query originale è più complessa, ma il risultato è il solito).
Grazie.
--
Cordiali saluti,
Jonathan Canova
www.aladinoinformatica.com

SELECT * FROM (SELECT Cognome, Nome FROM Anagrafica)
Potresti specificare meglio il quesito indicando le tabelle ed il tipo
di interrogazione che vuoi eseguire?
ing. Franco Varoli
fva...@tin.it
fva...@libero.it

 di interrogazione che vuoi eseguire?
E' un po' lunghetto. Semplifico il più possibile. Consideriamo una fattura.
Per calcolare imponibile ed iva ho qualcosa del tipo
SELECT IVA, Sum(([Prezzo]*[Qta])*(1-[Sconto])) AS Imponibile,
[Imponibile]*[IVA] AS Imposta
FROM [Dettagli Scarico]
GROUP BY [Dettagli Scarico].IVA;
che funziona benissimo e mi da la lista di Aliquota IVA, totale imponibile e
Totale imposta.
Adesso vorrei ottenere un totale degli imponibili e delle imposte.
Se chiamo la query sopra "Query1", l'SQL risultante è
SELECT Sum(Imponibile) AS SommadiImponibile, Sum(Imposta) AS SommadiImposta
FROM [Query1];
Vorrei ottenere il tutto tramite una sola istruzione SQL, tipo
SELECT Sum(Imponibile) AS SommadiImponibile, Sum(Imposta) AS SommadiImposta
FROM
(SELECT IVA, Sum(([Prezzo]*[Qta])*(1-[Sconto])) AS Imponibile,
[Imponibile]*[IVA] AS Imposta
FROM [Dettagli Scarico]
GROUP BY [Dettagli Scarico].IVA);
Notare che ho semplicemente sostituito a Query1 l'SQL di Query1!
C'è un modo più semplice per farlo? Grazie per l'attenzione!


C'è un modo più semplice per farlo? Grazie per l'attenzione!
A mio avviso no. Ho provato la query multipla sul database Northwind e
funziona benissimo. Credo che sia difficile fare meglio. Pero' non
comprendo bene il problema, ammesso che ci sia. Non e' gia' abbastanza
semplice la soluzione che hai proposto? e non credo nemmeno che sia
una questione di tempo di esecuzione o di risorse-macchina impegnate.
Saluti.



Con l'SQL di Access NON è possibile.
Non lo è neanche con l'SQL di SQL Server.
Lo è invece con l'SQL di Oracle...
Le uniche subquery accettate da Access oltre che da sequel server sono
quelle nelle clausole select e where.
Es.
select C1, (select C2 from T2 where T2.C3 = x)
from T1
where C4 in (select C4 from T3 where T3.C5 = T1.C6)
Ovviamente nella clausola select la subquery è accettata a patto che
restituisca un solo record.
Spero di essere stato d'aiuto.
Michele Amato
--
{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}
Sul mio sito
http://www.maengineering.it
è possibile trovare del materiale relativo ad Access
scritto da me, sia freeware che shareware
{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}

 Spero di essere stato d'aiuto.
Grazie, mi hai tolto comunque un dubbio!


 una questione di tempo di esecuzione o di risorse-macchina impegnate.
Semplicemente evitavo di creare parecchie query che utilizzo poi via codice.
L'applicazione resta più pulita, visto che l'SQL di ogni calcolo risulta
incorporato nella rispettiva routine.
Poi è saltato fuori un problema aggiuntivo. Siccome nella query base devo
selezionare le righe in base ad IDMovimento, se richiamo la query da codice,
viene fuori il maledetto messaggio "1 parametri richiesti, 0 forniti".
Maggiori dettagli su MSDN: Q209203
Al che mi sono fatto un recordset sulla query salvata e costruito i totali a
mano. Ma è brutto :-)


Quale, esattamente?
Ho fatto una prima query sulla tabella Dettagli ordini poiche' ha i
campi Prezzo unitario, Quantità e Sconto (al posto di IVA).
SELECT Sconto, Sum(([PrezzoUnitario]*[Quantità])*(1-[Sconto])) AS
Imponibile, [Imponibile]*[Sconto] AS Imposta
FROM [Dettagli Ordini]
GROUP BY [Dettagli Ordini].Sconto;
Questa query mi e' servita per controllo. Poi ho fatto una seconda
query seguendo le tracce da te indicate. 
SELECT Sum(Imponibile) AS SommadiImponibile, Sum(Imposta) AS
SommadiImposta
FROM (SELECT Sconto, Sum(([PrezzoUnitario]*[Quantità])*(1-[Sconto]))
AS Imponibile,
[Imponibile]*[Sconto] AS Imposta
FROM [Dettagli Ordini]
GROUP BY [Dettagli Ordini].Sconto).
Il risultato dovrebbe essere quello cercato. Sugli altri problemi non
so che cosa dirti.


 so che cosa dirti.
Domanda: con Access 2000, spero. Con il 2.0 ed il 97 non sono riuscito a
farla funzionare.


farla funzionare.
Confermo: funziona con Access 2000.
