Newsgroup: it.comp.lang.visual-basic
Titolo: [VB6]Query risultati di più record su una riga

Ho una tabella Prestazioni con questi campi
Codice,Descrizione,Quantit�, Mese
Per ogni mese ci sono pi� record tipo 20 descrizioni in gennaio, 30 in 
febbraio ecc.
Devo estrapolare la somma delle quantit� per ogni mese e visualizzarle in 
griglia.
Codice | Descrizione | Gen | Feb | Mar | Apr | Tot |
10.01     Pippo            10     15    30      20    75
10.25     Pluto             20     10    10      30    70
09.12     Paperino       15     25    20      10    70
come posso fare, avevo pensato a union con pi� query una per ogni mese ma 
fino a 12 � lunga.
Grazie
Carmelo

 fino a 12 ï¿œ lunga.
Se ti accontenti di 12 mesi, non ï¿œ difficile:
SELECT CODICE, MAX(DESCRIZIONE) AS DESCRIZIONE,
   SUM(CASE WHEN DATA BETWEEN '20090101' AND '20090131' THEN QUANTITA 
ELSE 0 END) AS GEN
,   SUM(CASE WHEN DATA BETWEEN '20090102' AND '20090228' THEN QUANTITA 
ELSE 0 END) AS FEB
........
FROM TABELLA
GROUP BY CODICE
ORDER BY CODICE
Se invece vuoi una cosa dinamica, cerca su Google 'crosstab'.
Alberto
-- 
Georges Pompidou: Un uomo di stato ï¿œ un politico che dona se stesso al 
servizio della nazione. Un politico ï¿œ un uomo di stato che pone la 
nazione al suo servizio.

Mentre mi apprestavo a riciclare alcuni bit, *Carmelo* ha scritto:

SELECT [Codice],
    [Descrizione],
    SUM(CASE [Mese] WHEN 'Gen' THEN [Quantit�] ELSE 0 END) [Gen],
    SUM(CASE [Mese] WHEN 'Feb' THEN [Quantit�] ELSE 0 END) [Gen],
    SUM(CASE [Mese] WHEN 'Mar' THEN [Quantit�] ELSE 0 END) [Gen],
    SUM(CASE [Mese] WHEN 'Apr' THEN [Quantit�] ELSE 0 END) [Gen],
    SUM(CASE [Mese] WHEN 'Mag' THEN [Quantit�] ELSE 0 END) [Gen],
    SUM(CASE [Mese] WHEN 'Giu' THEN [Quantit�] ELSE 0 END) [Gen],
    SUM(CASE [Mese] WHEN 'Lug' THEN [Quantit�] ELSE 0 END) [Gen],
    SUM(CASE [Mese] WHEN 'Ago' THEN [Quantit�] ELSE 0 END) [Gen],
    SUM(CASE [Mese] WHEN 'Set' THEN [Quantit�] ELSE 0 END) [Gen],
    SUM(CASE [Mese] WHEN 'Ott' THEN [Quantit�] ELSE 0 END) [Gen],
    SUM(CASE [Mese] WHEN 'Nov' THEN [Quantit�] ELSE 0 END) [Gen],
    SUM(CASE [Mese] WHEN 'Dic' THEN [Quantit�] ELSE 0 END) [Gen],
    SUM([Quantit�]) [Tot]
FROM [Prestazioni]
GROUP BY [Codice], [Descrizione]
ORDER BY [Codice]
-- 
3st3b4n
Questo post � stato scritto con bit riciclati 

 ha scritto nel messaggio 
news:78ne41F...@mid.individual.net...

Io uso DAO 3.6 con access e mi sa che (nella guida non l'ho trovato) case 
when non esiste
Carmelo 

 Carmelo
Allora cos�:
SELECT Prestazioni.Codice,
    Prestazioni.Descrizione,
    Sum(IIf([Mese]="Gen",[Quantita],0)) AS "Gen",
    Sum(IIf([Mese]="Feb",[Quantita],0)) AS "Feb",
    Sum(IIf([Mese]="Mar",[Quantita],0)) AS "Mar",
    Sum(IIf([Mese]="Apr",[Quantita],0)) AS "Apr",
    Sum(IIf([Mese]="Mag",[Quantita],0)) AS "Mag",
    Sum(IIf([Mese]="Giu",[Quantita],0)) AS "Giu",
    Sum(IIf([Mese]="Lug",[Quantita],0)) AS "Lug",
    Sum(IIf([Mese]="Ago",[Quantita],0)) AS "Ago",
    Sum(IIf([Mese]="Set",[Quantita],0)) AS "Set",
    Sum(IIf([Mese]="Ott",[Quantita],0)) AS "Ott",
    Sum(IIf([Mese]="Nov",[Quantita],0)) AS "Nov",
    Sum(IIf([Mese]="Dic",[Quantita],0)) AS "Dic",
    Sum([Quantita]) AS "Tot"
FROM Prestazioni
GROUP BY Prestazioni.Codice, Prestazioni.Descrizione
ORDER BY Prestazioni.Codice;


 when non esiste
Dai su, un minimo di intraprendenza...


Questa funziona pure, per� visualizza solo i mesi valorizzati.
Nel 2009 per ora ho inserito i dati solo per i mesi da gennaio ad aprile e 
la query mi visualizza solo quelli, a me servono tutti i mesi anche i 
successivi con 0
TRANSFORM Sum(Prestazioni.Quantita) AS SommaDiQuantita
SELECT Prestazioni.Codice, Prestazioni.Descrizione, Prestazioni.Tariffa, 
Sum(Prestazioni.Quantita) AS Quantit�, ([Prestazioni].[Tariffa]*[Quantit�]) 
AS Equivalente
FROM Prestazioni
WHERE (Prestazioni.Anno)=2009
GROUP BY Prestazioni.Codice, Prestazioni.Descrizione, Prestazioni.Tariffa
ORDER BY Prestazioni.Codice
PIVOT Prestazioni.Mese;
Carmelo 

 la query mi visualizza solo quelli, a me servono tutti i mesi anche i
Non ho provato su access ma mi sembra quasi impossibile che il numero di
colonne vari a seconda dei dati all'interno. Ti dovrebbero solo dare dei
campi a Null, per trasformare quello in uno 0 si fa in altro modo. Un
coalesce o un altro IIf credo in access.
Piuttosto la tua, pur non conoscendo access, direi che fa vedere come
colonne-mesi solo quelli popolati. Dato che fa il pivot dopo una query che
da solo alcuni risultati.
Ti basta cambiare la where di prova in:
WHERE (Prestazioni.Anno)=2009 AND (Prestazioni.Mese="Giu")
La prima ti fa vedere tutto, la tua invece dovrebbe fare solo una colonna
con Giu.

"Andrea [Work]" <andrea.isw...@gmail.invalid> ha scritto nel 
messaggio news:1x5sx2p4b7z1t.q2o6aojbqcu5$.dlg@40tude.net...

Infatti se giugno non ha record non visualizza niente.
Ma io devo visualizzare tutti i mesi anche quelli non popolati
Carmelo 

 Ma io devo visualizzare tutti i mesi anche quelli non popolati
Appunto, il primo sistema su access funziona.
Quello con gli iif("gen" per capirci.
Per essere sicuro oltre la logica, l'ho testato pari pari con quella query:
Codice	Descrizione	"Gen"	"Feb"	"Mar"	"Apr"	"Mag"	"Giu"	"Lug"	"Ago"	"Set"	
"Ott"	"Nov"	"Dic"	"Tot"
aaa	aaaa	5	0	0	0	0	0	0	0	0	0	0	0	5
Il tuo metodo, facendo un Pivot dopo una group by, avr� un numero di colone
dipendenti da quante righe sono quelle della query. O almeno immagino.
La cosa sicura � che *gi� il primo* ha tutti i risultati di tutti i mesi
anche se vuoti. Funziona anche se la tabella � completamente vuota
ovviamente.

 Ma io devo visualizzare tutti i mesi anche quelli non popolati
Appunto, il primo sistema su access funziona.
Quello con gli iif("gen" per capirci.
Per essere sicuro oltre la logica, l'ho testato pari pari con quella query:
Codice	Descrizione	"Gen"	"Feb"	"Mar"	"Apr"	"Mag"	"Giu"	"Lug"	"Ago"	"Set"	
"Ott"	"Nov"	"Dic"	"Tot"
aaa	aaaa	5	0	0	0	0	0	0	0	0	0	0	0	5
Il tuo metodo, facendo un Pivot dopo una group by, avr� un numero di colone
dipendenti da quante righe sono quelle della query. O almeno immagino.
La cosa sicura � che *gi� il primo* ha tutti i risultati di tutti i mesi
anche se vuoti. Funziona anche se la tabella � completamente vuota
ovviamente.
Ora l'ho provata, e cvd restituisce un numero di colonne variabile:
Codice	Descrizione	Quantita	Feb	Gen
		200	200	
111	33213651	300		300
aaa	desc	500		500
PS: spero che quelle � accentate siano un refuso di riscrittura e non i
veri nomi delle tabelle :-)