Newsgroup: it.comp.appl.access
Titolo: Un anno che non c'è.....posso visualizzarlo ?

buongiorno a tutti.
Un problemino scemo che mi fa impazzire.
In calce ad una maschera ho diverse sottomaschere che visualizzano
incolonnati dei totali annuali. Ognuna di queste tabelle ha origine
dati da una query.
 
la visualizzazione mi risulta quindi di questo tipo:
 
Pane                          Latte                   Prosciutto
2008 --1000              2008 --1000           2008 --1000
2009 --1000              2010 --1000           2009 --1000
2010 --1000              2011 --1000           2010 --1000
 
Può succedere (come nell'esempio del latte)  che un anno non abbia
dati e che quindi la sua tabella risulti disallineata dalle altre,
(vorrei ogni anno sulla stessa riga).
Premesso che gli anni sono quelli dal 2005 al 2012 ho provato a
collegarne i campi (contenuti in una tabella) alla query...ma
ovviamente non trovando corrispondenza non funziona.
Mi sto dando dello scemo da solo...
Qualcuno sa aiutarmi ?
 
 

 ...
 
La solita scappatoia è di crearsi una tabella tblDate con
tutte le date che possono essere interessanti. Con VBA è
un gioco di 3 minuti. Questa tabella si puo sempre collegare
nelle query con un LEFT o RIGHT JOIN che dà tutti record
della tabella tblDate e solo quelli dell'altra tabella ecc.
 
Forse nel tuo caso basta anche una tabella tblAnni con
un solo campo Anno del tipo Long dove inserisci
2000, 2001 ... 2050
che puoi usare o direttamente nelle query di sopra (dipende
dei tuoi dati) o in una seconda query con i risultati della
prima query ma sempre nel modo descritto.
 
Se non riesci, mostra l'SQL di una delle query,
descrivi cosa hai provato e cosa non ha funzionato.
 
-- 
Ciao
Karl
*********
Access FAQ:  
http://www.donkarl.com/it
 
 

 - Mostra testo citato -
 
ciao Karl.
grazie per l'aiuto, lo avevi già fatto altre volte e non posso che
ringraziarti per l'interesse.
 
Allora la mia query è questa:
 
SELECT DISTINCTROW QRY_TRIBUTENZE.[Anno di rifto],
QRY_TRIBUTENZE.Codiceimmobile, QRY_TRIBUTENZE.Tipologia,
Sum(QRY_TRIBUTENZE.Importo) AS [Somma Di Importo]
FROM QRY_TRIBUTENZE
GROUP BY QRY_TRIBUTENZE.[Anno di rifto],
QRY_TRIBUTENZE.Codiceimmobile, QRY_TRIBUTENZE.Tipologia
HAVING (((QRY_TRIBUTENZE.Codiceimmobile) Like "*" & [forms]!
[FRM_Apertura]![codimmoattivo]) AND
((QRY_TRIBUTENZE.Tipologia)="Gas"))
ORDER BY QRY_TRIBUTENZE.[Anno di rifto];
 
che mi restituisce le sommatorie annuali in questo caso per il consumo
di gas.
Ho provato a creare una tabella Anni con campi
(2005/2006/2007/2008/2009/2010/2011/2012) e collegandola alla query
non mi funziona, ovvero filtra solo gli anni in cui sono presenti
dati...
questo è il codice risultante:
 
SELECT DISTINCTROW QRY_TRIBUTENZE.[Anno di rifto],
QRY_TRIBUTENZE.Codiceimmobile, QRY_TRIBUTENZE.Tipologia,
Sum(QRY_TRIBUTENZE.Importo) AS [Somma Di Importo]
FROM QRY_TRIBUTENZE RIGHT JOIN Anni ON QRY_TRIBUTENZE.[Anno di rifto]
= Anni.ANNO
GROUP BY QRY_TRIBUTENZE.[Anno di rifto],
QRY_TRIBUTENZE.Codiceimmobile, QRY_TRIBUTENZE.Tipologia
HAVING (((QRY_TRIBUTENZE.Codiceimmobile) Like "*" & [forms]!
[FRM_Apertura]![codimmoattivo]) AND
((QRY_TRIBUTENZE.Tipologia)="Acqua"));
 
grazie infinite

 ((QRY_TRIBUTENZE.Tipologia)="Acqua"));
 
Se ti capisco bene hai creato un campo per ogni anno. Io invece
intendevo una tabelle "tblAnni" con 1 solo campo "Anno" dove
inserisci gli anni come valori, cioè ogni anno è un record.
 
Se lo fai così la query (un po' ottimizzata) sarebbe:
 
SELECT
    a.[Anno di rifto], a.Codiceimmobile, a.Tipologia,
    Sum(a.Importo) AS SommaDiImporto
FROM
    QRY_TRIBUTENZE As a RIGHT JOIN tblAnni
        ON a.[Anno di rifto] = tblAnni.Anno
WHERE
    a.Codiceimmobile Like "*" & Forms!FRM_Apertura!codimmoattivo
    AND a.Tipologia="Acqua"
GROUP BY
    a.[Anno di rifto], a.Codiceimmobile, a.Tipologia
 
Tenta di evitare spazi nei nomi di oggetti, campi, alias ecc.!
Vedi anche  
http://www.donkarl.com/it?FAQ1.5
.


 - Mostra testo citato -
 
ciao Karl,
ti confermo una tabella tblAnni con un campo Anno di otto record
(2005/2006/2007/2008/2009/2010/2011/2012) come idea per poter vedere i
dati relativi ad ogni annno, vuoti se non pervenuti.
 
Ho modificato il codice, secondo i tuoi suggerimenti in:
 
SELECT QRY_TRIBUTENZE.[Anno di rifto], QRY_TRIBUTENZE.Codiceimmobile,
QRY_TRIBUTENZE.Tipologia, Sum (QRY_TRIBUTENZE.Importo) AS
SommaDiImporto
FROM QRY_TRIBUTENZE As a RIGHT JOIN tblAnni ON QRY_TRIBUTENZE.[Anno di
rifto] = tblAnni.Anno
WHERE QRY_TRIBUTENZE.Codiceimmobile  Like "*" & forms!FRM_Apertura!
codimmoattivo
AND QRY_TRIBUTENZE.Tipologia="TARI"
 GROUP BY
QRY_TRIBUTENZE.[Anno di
rifto],QRY_TRIBUTENZE.Codiceimmobile,QRY_TRIBUTENZE.Tipologia
 
ma mi comunica errore di sintassi nell'operazione JOIN.
 
grazie per i sempre utili suggerimenti, ne sto facendo patrimonio, in
questa occasione ho scoperto anche il suffisso tbl per le tabelle che
ancora non conoscevo.
grazie davvero-

 ...
 
Non hai sostituito il nome della query con il alias come l'ho
suggerito nel mio esempio. Quindi devi anche lasciare
perdere l'alias, cioč cancellare "As a" dall'enunciato SQL.


 - Mostra testo citato -
 
boh...scusami ma è proprio ostrogoto per me...
ho modificato il codice SQL della query così:
 
SELECT QRY_TRIBUTENZE.[Anno di rifto], QRY_TRIBUTENZE.Codiceimmobile,
QRY_TRIBUTENZE.Tipologia, Sum(QRY_TRIBUTENZE.Importo) AS
SommaDiImporto
FROM QRY_TRIBUTENZE RIGHT JOIN tblAnni ON QRY_TRIBUTENZE.[Anno di
rifto]=tblAnni.Anno
WHERE QRY_TRIBUTENZE.Codiceimmobile Like "*" & forms!FRM_Apertura!
codimmoattivo And QRY_TRIBUTENZE.Tipologia="TARI"
GROUP BY QRY_TRIBUTENZE.[Anno di rifto],
QRY_TRIBUTENZE.Codiceimmobile, QRY_TRIBUTENZE.Tipologia;
 
la query ora funziona ma continua a darmi solo l'anno per il quale
sono presenti dei dati.
grazie per l'aiuto

 sono presenti dei dati.
 
Ok, č colpa della condizione WHERE. Quindi devi usare il
secondo metodo menzionato nella mia prima risposta:
 
Salvi la query senza la tabelle tblAnni, cioč
 
SELECT QRY_TRIBUTENZE.[Anno di rifto], QRY_TRIBUTENZE.Codiceimmobile,
QRY_TRIBUTENZE.Tipologia, Sum(QRY_TRIBUTENZE.Importo) AS
SommaDiImporto
FROM QRY_TRIBUTENZE
WHERE QRY_TRIBUTENZE.Codiceimmobile Like "*" & forms!FRM_Apertura!
codimmoattivo And QRY_TRIBUTENZE.Tipologia="TARI"
GROUP BY QRY_TRIBUTENZE.[Anno di rifto],
QRY_TRIBUTENZE.Codiceimmobile, QRY_TRIBUTENZE.Tipologia;
 
Poi crea una nuova query con tblAnni e questa query salvata dove
collegi le due verso l'anno in modo che ti mostra tutti record della
tblAnni e solo quelli dall'altra che...
 
Il risultatante enunciato SQL sarebbe circa:
 
SELECT Anno, [Anno di rifto], Codiceimmobile, Tipologia, SommaDiImporto
FROM TuaQuery RIGHT JOIN tblAnni ON TuaQuery.[Anno di rifto]=tblAnni.Anno
