Newsgroup: it.comp.appl.access
Titolo: Chi mi dà una mano con una query?

https://1drv.ms/u/s!AvTaMfd5-b2o1Co1Uzv6sWcoP1bv?e=FJIw5E
 
 
Bruno

 
https://1drv.ms/u/s!AvTaMfd5-b2o1Co1Uzv6sWcoP1bv?e=FJIw5E
 
 
mi manca acrobat.tlb, è necessaria per forza?
dopo numerosi OK arrivo comunque alla query:
 
SELECT TMP.F1, Sum(TMP.S1) AS S1, Sum(TMP.S2) AS S2, Sum(TMP.S3) AS S3, 
Sum(TMP.S4) AS S4, Sum(TMP.S5) AS S5, [S1]+[S2]+[S3]+[S4]+[S5] AS Totali
FROM TMP
GROUP BY TMP.F1;
 
 
-- 
/-\ /\/\ /\/\ /-\ /\/\ /\/\ /-\ T /-\
-=- -=- -=- -=- -=- -=- -=- -=- - -=-
........... [ al lavoro ] ...........

 
 
SELECT top 3
[%$##@_Alias].f1, Sum([%$##@_Alias].f2) AS SumOff2, Sum([%$##@_Alias].f3) 
AS SumOff3, Sum([%$##@_Alias].f4) AS SumOff4, Sum([%$##@_Alias].f5) AS 
SumOff5, Sum([%$##@_Alias].f6) AS SumOff6, 
Sum([%$##@_Alias].f2)+Sum([%$##@_Alias].f3)+Sum([%$##@_Alias].f4)+Sum([%$##
@_Alias].f5)+Sum([%$##@_Alias].f6) AS SumTotal INTO aaa
FROM (SELECT * from 1_gen union
SELECT * from 2_feb union
SELECT * from 3_mar union
SELECT * from 4_apr union
SELECT * from 5_mag union
SELECT * from 6_giu union
SELECT * from 7_lug union
SELECT * from 8_ago union
SELECT * from 9_set union
SELECT * from 10_ott union
SELECT * from 11_nov union
SELECT * from 12_dic 
 
)  AS [%$##@_Alias]
GROUP BY [%$##@_Alias].f1
ORDER BY 
Sum([%$##@_Alias].f2)+Sum([%$##@_Alias].f3)+Sum([%$##@_Alias].f4)+Sum([%$##
@_Alias].f5)+Sum([%$##@_Alias].f6) DESC;
 
 
 
 
f1	SumOff2	SumOff3	SumOff4	SumOff5	SumOff6	SumTotal
X-18	1291	1349	1410	1155	1196	6401
X-45	1217	1269	1049	1394	1428	6357
X-75	1234	1198	1297	1170	1059	5958


 GROUP BY TMP.F1;
 
Questa dà il risultato esatto... ma la tabella TMP la devi creare tu,
non leggere quella che ho creato io.
 
Bruno

 X-75	1234	1198	1297	1170	1059	5958
 
... e il risultato non è esatto.
 
Bruno

 
 
sicuro?
 
ho messo le tabelle in excel e ho lo stesso risultato...


 
 
o forse non ho capito la domanda, vedi:
 
"IL venditore vuole premiare il Cliente che nei 12 mesi ha effettuato  una 
o più ordinazioni per ciascun mese."
 
intendi dire che deve aver fatto ALMENO una ordinazione OGNI mese?
 
 
testo originale:
Le tabelle dei mesi dell'anno 1_GEN, 2_FEB, ... 12_DIC contengono ciascuna 
100 record di 6 campi:
F1           - il codice cliente
S1... S5 - il fatturato mensile di 5 prodotti.
 
IL venditore vuole premiare il Cliente che nei 12 mesi ha effettuato  una o 
più ordinazioni per ciascun mese.
Se rispondono alla condizione più clienti, il premio andrà a quello col 
maggior fatturato.
 
La tabella TMP mostra il risultato compreso il totale fatturato annuale 
(tale ultimo dato non è importante, si può benissimo rilevare, definita la 
tabella, con una semplice query).
 
Io ho risolto il problema in 2 modi che non mi convincono, perché mi sembra 
impossibile non si possa ottenere il risultato con un'UNICA semplice (o 
complessa) query.
 
SENZA MODIFICARE IL CONTENUTO DELLE 12 TABELLE MENSILI


 
 
allora concordo con te :)
 
mi sembrava una domanda fin troppo semplice...


 mi sembrava una domanda fin troppo semplice...
 
Sì, la difficoltà è tutta lì, ma non solo: se qualcuno ha più di un
fatturato al mese, ne vanno prese le somme dei prodotti.
 
Bruno

 
 
allora, l'idea è questa:
 
unisco le tabelle aggiungendo un campo M che vale 1 per gennaio, 2 per 
febbraio, 4 per marzo, 8 per aprile, etc etc 2048 per dicembre
 
poi raggruppo per F1 sommando i campi f2-f6 e prendendo il MAX di M
 
ottengo, per X1 (esempio):
 
f1	MM	S2	S3	S4	S5	S6	ST
X-1	1	15	38	19	98	88	258
X-1	2	161	136	96	48	118	559
X-1	16	125	91	171	255	172	814
X-1	32	256	249	39	178	250	972
X-1	64	144	81	154	24	38	441
X-1	256	192	161	111	143	133	740
X-1	512	94	143	99	81	105	522
X-1	1024	72	54	112	165	123	526
X-1	2048	136	158	246	134	192	866
 
 
poi raggruppo ancora per F1 sommando MM, S2, S3, etc
 
alla fine filtro per MM = 4095, cioè ci sono tutti i mesi
 
ordino discendente per il totale
prendo i primi 3
 
il problema col mio access 2010 è che non accetta una "action query" come 
origine dati di una ulteriore query
 
forse sbaglio qualcosa ma l'idea è giusta
 
in excel:
 
X-27 Total	4095	1043	1144	1138	985	1007	5317
X-39 Total	4095	1254	974	1084	1240	1110	5662
X-62 Total	4095	1041	960	867	980	1170	5018
X-58 Total	4094	1161	1107	1218	1109	1204	5799
X-65 Total	4091	715	736	653	607	607	3318
X-48 Total	4090	778	746	706	744	618	3592
X-33 Total	4087	710	661	723	859	860	3813
X-10 Total	4085	807	777	827	718	639	3768
 
 
TMP:
 
F1	S1	S2	S3	S4	S5	Totali
X-27	1043	1144	1138	985	1007	5317
X-39	1254	974	1084	1240	1110	5662
X-62	1041	960	867	980	1170	5018


Ammammata was thinking very hard :

Perché hai preso i primi tre? in base a quale criterio?
Essi possono dare un risultato corretto anche soltanto
incidentalmente.
Io ci ho speso i due giorni di Natale poi per l'Epifania ho
fatto qualche limatura.
Mandami l'intero codice, quello che premendo un pulsante, senz'altra
preparazione, produce la tabella TMP.
 
Ti invio altra copia con differenti dati e senza risultato.
Con ciò non voglio dire che stai bluffando, solo che conoscendo il
risultato, da un insieme di possibilità non hai potuto evitare di
scegliere quella giusta.
Se poi mi sbaglio io, mi genufleggo pubblicamente, ti copro di scuse
e ti nomino cavaliere del Graal per le query.
 
https://1drv.ms/u/s!AvTaMfd5-b2o1Co1Uzv6sWcoP1bv?e=o4tQAP
 
 
Bruno

 
 
premesso che il codice (in Access) contiua a darmi lo stesso problema (*), 
ecco la tabella che ottengo in Excel raggruppando e sommando
 
questa volta ci sono 4 personaggi che hanno fatto il pieno
 
f1	MM	S2	S3	S4	S5	S6	ST
X-27 Total	4095	984	1177	1104	909	990	5164
X-37 Total	4095	701	1140	1044	1184	831	4900
X-46 Total	4095	1343	1370	1135	1333	1210	6391
X-74 Total	4095	1371	1265	1225	981	1685	6527
X-7 Total	4093	603	722	763	887	862	3837
X-60 Total	4087	1229	1266	1503	1225	1049	6272
X-61 Total	4087	954	1126	592	899	943	4514
X-58 Total	4071	1103	1472	1071	1068	1126	5840
X-59 Total	4071	1245	1195	1127	1015	1075	5657
X-44 Total	4063	1185	716	1028	994	1036	4959
X-3 Total	4055	1150	843	1090	825	949	4857
X-15 Total	4045	701	703	875	830	856	3965
X-26 Total	4040	427	524	533	727	712	2923
X-25 Total	4029	1316	1039	1157	1206	1347	6065
X-49 Total	4018	529	826	775	868	877	3875
X-34 Total	3983	980	1017	891	1134	740	4762
X-9 Total	3967	479	792	693	708	656	3328
X-16 Total	3966	730	1198	704	891	680	4203
X-72 Total	3963	804	692	614	713	670	3493
X-33 Total	3919	738	854	808	996	828	4224
X-1 Total	3833	775	486	570	635	932	3398
X-56 Total	3830	934	1023	1218	945	761	4881
X-13 Total	3828	845	791	745	614	670	3665
X-47 Total	3810	557	682	477	545	743	3004
X-11 Total	3798	752	634	602	541	866	3395
X-12 Total	3775	835	881	850	678	734	3978
X-20 Total	3771	641	633	742	705	770	3491
X-53 Total	3759	874	879	829	734	699	4015
X-43 Total	3727	894	730	698	490	748	3560
X-45 Total	3694	556	491	601	570	588	2806
X-23 Total	3663	586	619	566	609	594	2974
X-70 Total	3640	524	494	555	395	542	2510
X-62 Total	3583	841	1062	984	845	891	4623
X-17 Total	3573	809	824	828	688	954	4103
X-29 Total	3563	631	649	757	735	730	3502
X-18 Total	3551	806	838	1012	895	912	4463
X-65 Total	3545	617	622	1030	606	554	3429
X-19 Total	3511	521	462	808	693	625	3109
X-35 Total	3487	777	704	789	949	731	3950
X-51 Total	3434	274	600	437	622	456	2389
X-22 Total	3355	541	402	654	486	507	2590
X-36 Total	3326	587	870	625	702	833	3617
X-57 Total	3293	944	833	688	901	764	4130
X-30 Total	3263	430	463	490	463	494	2340
X-32 Total	3159	855	972	890	1045	1025	4787
X-71 Total	3070	709	684	807	731	1125	4056
X-5 Total	3063	993	867	1056	1011	1051	4978
X-28 Total	3055	860	840	682	981	451	3814
X-54 Total	3051	937	669	696	704	729	3735
X-2 Total	2973	826	857	957	817	1150	4607
X-75 Total	2957	509	532	511	293	463	2308
X-4 Total	2923	806	1069	768	1194	1057	4894
X-39 Total	2781	945	542	990	951	941	4369
X-67 Total	2747	521	538	743	580	651	3033
X-42 Total	2682	889	1082	695	697	876	4239
X-6 Total	2295	630	650	706	752	704	3442
X-55 Total	2238	546	707	415	348	671	2687
 
 
 
(*) vorrei provare in MS SQL ma oggi sono un po' preso, il test potrebbe 
essere stasera (a casa)


 X-74 Total	4095	1371	1265	1225	981	1685	6527
Esatto! il risultato è corretto.
 
Bruno

 
 
la query che funziona a metà, a meno che qualche esperto riesce a 
correggerla
 
le tre fasi sono annidate, si parte dal centro
 
 
 
/* fase 3: legge %bbb, somma i dodici mesi e invia a video
questa è la fase che non funziona per i motivi spiegati in precedenza
(non accetta una "action query" come origine dati)
il mio controllo lo ho fatto prendendo l'output della fase 2
e mettendo i dati in excel per l'ultimo raggruppamento */
 
SELECT 
[%bbb].f1 AS fx, 
sum([%bbb].MM) AS mx, 
sum([%bbb].S2) AS s2x, 
sum([%bbb].S3) AS s3x, 
sum([%bbb].S4) AS s4x, 
sum([%bbb].S5) AS s5x, 
sum([%bbb].S6) AS s6x 
 
INTO bbb
 
FROM (
 
/* fase 2: legge %aaa, raggruppa i mesi, somma i valori e mette in tabella 
temporanea %bbb */
 
SELECT 
[%aaa].f1, 
max(M) AS MM, 
Sum([%aaa].f2) AS S2, 
Sum([%aaa].f3) AS S3, 
Sum([%aaa].f4) AS S4, 
Sum([%aaa].f5) AS S5, 
Sum([%aaa].f6) AS S6, 
Sum([%aaa].f2)+Sum([%aaa].f3)+Sum([%aaa].f4)+Sum([%aaa].f5)+Sum([%aaa].f6) 
AS ST 
 
INTO bbb 
 
FROM (
 
/* fase 1: accoda i dodici mesi aggiungendo il campo M e li mette nella 
tabella temporanea %aaa */
 
SELECT          1 as M, * from  1_gen 
union SELECT    2 as M, * from  2_feb 
union SELECT    4 as M, * from  3_mar 
union SELECT    8 as M, * from  4_apr 
union SELECT   16 as M, * from  5_mag 
union SELECT   32 as M, * from  6_giu 
union SELECT   64 as M, * from  7_lug 
union SELECT  128 as M, * from  8_ago 
union SELECT  256 as M, * from  9_set 
union SELECT  512 as M, * from 10_ott 
union SELECT 1024 as M, * from 11_nov 
union SELECT 2048 as M, * from 12_dic    
 
)  AS [%aaa] 
 
GROUP BY [%aaa].f1, M
 
)  AS [%bbb]
 
WHERE [%bbb].mx = 4095
 
GROUP BY [%bbb].fx
 
ORDER BY 
Sum([%bbb].s2x)+Sum([%bbb].s3x)+Sum([%bbb].s4x)+Sum([%bbb].s5x)+Sum([%bbb].
s6x) DESC;


Ammammata pretended :

Beh, complimenti!
Il risultato sei in grado di ottenerlo, anche senza un programma
integrato.
In Access ottengo il risultato, con 12 mesi da 100 record cadauno,
con un click e 125/1000 di secondo.
In Excel, sempre com 100 record per mese, impiego 12/1000 di secondo.
 
Quel che ho tentato e ritentato e richiesto di ottenere è il risultato
in Access con una sola query... ma pare impossibile.
 
Bruno

 
 
se qualche guru del niusgruppo ci desse un'occhiata... magari trova il modo 
di far digerire ad access le tre query annidate
 
mi sembra un errore strano, SQL dovrebbe permettere questi semplici giri 
dei dati: ripeto, imho c'è un errore, ma non capisco quale possa essere


 dei dati: ripeto, imho c'è un errore, ma non capisco quale possa essere
 
Abbiamo un problema quasi analogo: tu hai tre query che vorresti tenere
ma non girano, io ne ho due che girano però vorrei farne una solo.
I guru si chiamano così perché san solo mugugnare.
 
Bruno

 io ne ho due che girano però vorrei farne una solo
 
pubblica, pubblica, si impara sempre qualcosa


ciao Bruno,
prova a  valutare il predicato che segue.
Parto dal presupposto che il premio venga assegnato ai clienti che hanno piazzato almeno 1 ordine al mese.
ciao, Sandro.
 
 
SELECT D.f1, Sum(D.s1) AS ss1, Sum(D.s2) AS ss2, Sum(D.s3) AS ss3, Sum(D.s4) AS ss4, Sum(D.s5) AS ss5, Count(D.f1) AS contacust, sum(d.s1)+sum(d.s2)+sum(d.s3)+sum(d.s4) +sum(d.s5) AS totFatt
FROM (SELECT [1_GEN].F1, sum([1_GEN].F2) as s1, sum([1_GEN].F3) as s2, sum([1_GEN].F4) as s3, sum([1_GEN].F5) as s4, sum([1_GEN].F6) as s5, val("1") as Mese
FROM 1_GEN
group by  [1_GEN].F1
 
union all 
 
SELECT [2_FEB].F1, sum([2_FEB].F2)as s1,sum([2_FEB].F3) as s2, sum([2_FEB].F4) as s3, sum([2_FEB].F5) as s4, sum([2_FEB].F6) as s5,  val("2") as Mese
FROM 2_FEB
group by  [2_FEB].F1
 
 
union all 
 
SELECT [3_MAR].F1,sum([3_MAR].F2)as s1, sum([3_MAR].F3) as s2,sum([3_MAR].F4) as s3, sum([3_MAR].F5) as s4, sum([3_MAR].F6) as s5, val("3") as Mese
FROM 3_MAR
group by  [3_MAR].F1
 
union all 
 
SELECT [4_APR].F1,sum([4_APR].F2)as s1, sum([4_APR].F3) as s2, sum([4_APR].F4) as s3, sum([4_APR].F5) as s4, sum([4_APR].F6) as s5, val("4") as Mese
FROM 4_APR
group by  [4_APR].F1
 
union all 
 
SELECT [5_MAG].F1, sum([5_MAG].F2) as s1, sum([5_MAG].F3) as s2, sum([5_MAG].F4) as s3, sum([5_MAG].F5) as s4,sum([5_MAG].F6) as s5 ,  val("5") as Mese
FROM 5_MAG
group by  [5_MAG].F1
 
union all 
 
SELECT [6_GIU].F1, sum([6_GIU].F2) as s1, sum([6_GIU].F3) as s2, sum([6_GIU].F4) as s3, sum([6_GIU].F5) as s4, sum([6_GIU].F6) as s5,  val("6") as Mese
FROM 6_GIU
group by  [6_GIU].F1
 
union all 
 
SELECT [7_LUG].F1, sum([7_LUG].F2) as s1, sum([7_LUG].F3) as s2,sum([7_LUG].F4) as s3, sum([7_LUG].F5) as s4, sum([7_LUG].F6) as s5,  val("7") as Mese
FROM 7_LUG
group by  [7_LUG].F1
 
union all 
 
SELECT [8_AGO].F1, sum([8_AGO].F2) as s1, sum([8_AGO].F3) as s2, sum([8_AGO].F4) as s3,sum([8_AGO].F5) as s4, sum([8_AGO].F6) as s5,val("8")  as Mese
FROM 8_AGO
group by  [8_AGO].F1
 
union all 
 
SELECT [9_SET].F1,sum([9_SET].F2)as s1, sum([9_SET].F3) as s2, sum([9_SET].F4) as s3,sum([9_SET].F5) as s4,sum([9_SET].F6) as s5,val("9") as Mese
FrOM 9_SET
group by   [9_SET].F1
 
union all 
 
SELECT [10_OTT].F1, sum([10_OTT].F2)  as s1,Sum([10_OTT].F3) as s2, sum([10_OTT].F4) as s3, sum([10_OTT].F5) as s4, sum([10_OTT].F6) as s5,val("10") as Mese
FROM 10_OTT
group by   [10_OTT].F1
 
 
union all 
 
SELECT [11_NOV].F1,sum([11_NOV].F2) as s1, sum([11_NOV].F3) as s2, sum([11_NOV].F4) as s3, sum([11_NOV].F5) as s4, sum([11_NOV].F6) as s5, val("11") as Mese
FrOM 11_NOV
group by   [11_NOV].F1
 
 
UNION ALL SELECT [12_DIC].F1, sum([12_DIC].F2) as s1, sum([12_DIC].F3) as s2, sum([12_DIC].F4) as s3, sum([12_DIC].F5) as s4, sum([12_DIC].F6) as s5, val("12") as Mese
FROM 12_DIC
group by   [12_DIC].F1
)  AS D
GROUP BY D.f1
HAVING Count(D.f1)=12;

Sandro Peruz expressed precisely :

Occorre che non vi siano doppioni nei mesi, ma con UNION i
GROUP BY delle singole SELECT non vengono considerati.
Viene solo considerato il GROUP BY dell'intera unione funziona
però a ca... di cane.
Questo è il motivo che mi impedisce di utilizzare una sola query.
 
Se non vi sono i doppioni dopra detti, questa unica query fa tutto
il lavoro, senza una riga di codice:
 
SELECT [1_GEN].F1,
Sum([1_GEN].F2+[2_FEB].F2+[3_MAR].F2+[4_APR].F2+[5_MAG].F2+[6_GIU].F2+
[7_LUG].F2+[8_AGO].F2+[9_SET].F2+[10_OTT].F2+[11_NOV].F2+[12_DIC].F2) 
AS S1,
Sum([1_GEN].F3+[2_FEB].F3+[3_MAR].F3+[4_APR].F3+[5_MAG].F3+[6_GIU].F3+
[7_LUG].F3+[8_AGO].F3+[9_SET].F3+[10_OTT].F3+[11_NOV].F3+[12_DIC].F3) 
AS S2,
Sum([1_GEN].F4+[2_FEB].F4+[3_MAR].F4+[4_APR].F4+[5_MAG].F4+[6_GIU].F4+
[7_LUG].F4+[8_AGO].F4+[9_SET].F4+[10_OTT].F4+[11_NOV].F4+[12_DIC].F4) 
AS S3,
Sum([1_GEN].F5+[2_FEB].F5+[3_MAR].F5+[4_APR].F5+[5_MAG].F5+[6_GIU].F5+
[7_LUG].F5+[8_AGO].F5+[9_SET].F5+[10_OTT].F5+[11_NOV].F5+[12_DIC].F5) 
AS S4,
Sum([1_GEN].F6+[2_FEB].F6+[3_MAR].F6+[4_APR].F6+[5_MAG].F6+[6_GIU].F6+
[7_LUG].F6+[8_AGO].F6+[9_SET].F6+[10_OTT].F6+[11_NOV].F6+[12_DIC].F6) 
AS S5,
[S1]+[S2]+[S3]+[S4]+[S5] AS Totali
FROM ((((((((((1_GEN
INNER JOIN 2_FEB ON [1_GEN].F1 = [2_FEB].F1)
INNER JOIN 3_MAR ON [2_FEB].F1 = [3_MAR].F1)
INNER JOIN 4_APR ON [3_MAR].F1 = [4_APR].F1)
INNER JOIN 5_MAG ON [4_APR].F1 = [5_MAG].F1)
INNER JOIN 6_GIU ON [5_MAG].F1 = [6_GIU].F1)
INNER JOIN 7_LUG ON [6_GIU].F1 = [7_LUG].F1)
INNER JOIN 8_AGO ON [7_LUG].F1 = [8_AGO].F1)
INNER JOIN 9_SET ON [8_AGO].F1 = [9_SET].F1)
INNER JOIN 10_OTT ON [9_SET].F1 = [10_OTT].F1)
INNER JOIN 11_NOV ON [10_OTT].F1 = [11_NOV].F1)
INNER JOIN 12_DIC ON [11_NOV].F1 = [12_DIC].F1
GROUP BY [1_GEN].F1;
 
Metti l'SQL in una nuova query e guardane il risultato.
Poi gira sul Design e mettiti una mano fra i capelli...
 
Bruno

 il lavoro, senza una riga di codice: 
 
generalmente è sempre meglio a parere mio sfruttare soluzioni set based evitando cursori, quasi sempre è possibile e nella maggior parte dei casi le performance sono migliori, quindi no VBA.
Chiaro che chi lavora con Excel applica le regole e le logiche del database piatto e non relazionale, ma se i dati di excel sono "normalizzati" cosi come si vede dalle varie tabelle che hai importato, credo sia possibile anche evitare importazioni ridondanti ed interrogare la base  dati su XLS.
Da qui la logica di "mettere tutto assieme" con una union, in Access non serve una divisione per mese per memorizzare i dati divisi per mese, come ben sai pure tu.
La soluzione che mostri, con inner joins, che è la via migliore con il DB di Access, però non mi pare mostri i risultati che stai cercando.
Ciao, Sandro.

 ma non girano
 
ho messo tutto in MS SQL e il ragionamento funziona senza fare una grinza
 
 
/* fase 1: accoda i dodici mesi aggiungendo il campo M 
           e li mette nella tabella temporanea #aaa */
 
select *
into #aaa
from (
 
SELECT          1 as M, * from [dbo].[1_gen] 
union SELECT    2 as M, * from [dbo].[2_feb] 
union SELECT    4 as M, * from [dbo].[3_mar] 
union SELECT    8 as M, * from [dbo].[4_apr] 
union SELECT   16 as M, * from [dbo].[5_mag] 
union SELECT   32 as M, * from [dbo].[6_giu] 
union SELECT   64 as M, * from [dbo].[7_lug] 
union SELECT  128 as M, * from [dbo].[8_ago] 
union SELECT  256 as M, * from [dbo].[9_set] 
union SELECT  512 as M, * from [dbo].[10_ott] 
union SELECT 1024 as M, * from [dbo].[11_nov] 
union SELECT 2048 as M, * from [dbo].[12_dic]
 
) as aaa
 
-- debug
--select * from #aaa
--order by F1, M
 
 
 
/* fase 2: raggruppa i dodici mesi in base al campo M 
           sommando F2..F6
	     e li mette nella tabella temporanea #bbb */
 
 
select F1 as f1t, max(m) as mt, sum(f2) as f2t, sum(f3) as f3t, sum(f4) as 
f4t, sum(f5) as f5t, sum(f6) as f6t
 
into #bbb
 
from #aaa
 
group by F1, M
 
-- debug
--select * from #bbb
 
 
 
 
/* fase 3: raggruppa i venditori 
           sommando Mt e F2t..F6t
	     e li mette nella tabella temporanea #ccc */
 
 
select F1t as f1x, sum(mt) as mx, sum(f2t) as f2x, sum(f3t) as f3x, 
sum(f4t) as f4x, sum(f5t) as f5x, sum(f6t) as f6x
 
into #ccc
 
from #bbb
 
group by f1t
 
-- debug
select * from #ccc
where mx=4095
order by mx desc, f1x
 
 
 
 
drop table #aaa
drop table #bbb
drop table #ccc


 
 
nota bene: NON ho annidato le query, le ho eseguite una dopo l'altra



"E quello che cercai mattina e sera
Tanti e tanti anni in vano, è forse qui"
Come diceva Giosuè nei Cipressi...
 
È perfetto e funziona alla velocità della luce.
Congratulazioni!!!
 
Bruno
 
PS
Io poi ho tolto l'HAVING finale e aggiunto:
ORDER BY Count(D.F1) DESC
per aver di tutti la frequenza annuale riferita
alle mensilità.

 nota bene: NON ho annidato le query, le ho eseguite una dopo l'altra
 
Bene, congratulazioni anche a te!
Non sono in grado di verificare perché non ho MS SQL però mi fido
della tua parola.
Ma le tre query sono una query in formato UNION
o tre query separate che azioni in sequenza?
 
Bruno

 mostri i risultati che stai cercando. Ciao, Sandro.
 
Il problema deriva da Excel ed è stato risolto in vari modi da me ed
altri partecipanti.
La mia soluzione impiega 12/1000 di secondo, per cui mi sono rivolto
ad Access sperando, senza riuscirci, di poter fare il tutto con unica
query. Non ci sono riuscito... ci sei riuscito tu!
La mia soluzione in Access funziona con due query che vengono eseguite
in sequenza via VBA: tempo di esecuzione 125/1000 di secono.
La tua query è istantanea.
 
In Access non si userebbero mai 12 mesi, col che il problema si
risolverebbe in un attimo, in Excel invece, salvo impiegare
volumi di VBA specie nelle consultazioni periodiche, la soluzione
migliore è quella dei 12 mesi.
 
Forse in Access sono anche partito male iniziando con gli INNER JOIN
sugli F1 dei 12 mesi anziché attribuire un codice mese ai vari
partecipanti come hai fatto tu ed anche Ammamata, dopodiché il
GROUP BY e il SUM della UNION dovrebbero funzionato egregiamente.
Mi avete dato il suggerimento e ritenterò l'operazione "one query 
only".
 
Bruno

 
 
la seconda
 
le UNION le faccio all'inizio per unire tutti i dati dell'anno intero, in 
pratica la prima query è composta da dodici query :)
 
 
 
-- 
/-\ /\/\ /\/\ /-\ /\/\ /\/\ /-\ T /-\
-=- -=- -=- -=- -=- -=- -=- -=- - -=-
........... [  da casa  ] ...........

 pratica la prima query è composta da dodici query :)
 
Allora sei arrivato terzo.
Ché io faccio il risultato eseguendo in sequenza due query (la sequenza
è opera del VBA che esegue le due stringhe SQL senza che nulla appaia
fra le query della finestra database, ma le query son pur sempre due),
mentre Sandro non spende una riga di VBA e con un'unica query spara
fuori il risultato.
Me la sono studiata per bene e per la prossima occasione spero di
saperla imitare.
 
Si può imparare qualcosa di nuovo anche alla mia tarda età, purché
non ci si rincoglionisca col gioco del lotto.
 
Bruno

 
 
<modalità temperasupposte ON>
 
Sandro usa 13 query per ottenere il risultato: dodici (una per mese) per 
raggruppare le tabelle (sommando al contempo i valori) e una di riepilogo
 
la mia versione NON somma direttamente i valori al primo giro (quello che 
le unisce) per cui ne uso una in più: a mia difesa posso dire che lo ho 
fatto per poter controllare meglio i passaggi intermedi (verificandoli con 
una query di debug, poi disattivata)
 
<modalità temperasupposte OFF>
 
 
-- 
/-\ /\/\ /\/\ /-\ /\/\ /\/\ /-\ T /-\
-=- -=- -=- -=- -=- -=- -=- -=- - -=-
........... [ al lavoro ] ...........