Newsgroup: it.comp.lang.visual-basic
Titolo: Due recordset da unire e sommare

Ciao a tutti,
       come immaginerete dal seguito del post non sono un profondo
conoscitore del Visual Basic 6:
ho raccolto  due recordset  di descrizione campi identici fra loro  ma se
li unisco fra loro con una   "Union select" qualche record identico mi
sparisce.
Sono degli accessori dei quali devo stampare una etichetta con il loro
codice, descrizione e totale contenuto nel pacco per spedire tutto in
cantiere.
Cosa devo fare  ?
Unire questi due recordset identici e  sommare le somme delle quantità dei
 codici identici  siano essi del medesimo recorset che dell'altro.
Praticamente i lavori che non so fare sono due:
-Fusione dei due recordset senza uso dell' " union select" che mi scarta
materiale
- Group by di questi due risultati.
 
             LA PRIMA:
SELECT d.COCODI AS Commessa, D.ALLOCO AS Lista, A.ARTICO AS CodArt,
a.artide AS DesArt, (DTQTPR-DTQTUS-DTQTAC) AS Residuo
FROM ((ANARTRRR AS A INNER JOIN DISPRRRR AS B ON A.ARTICO=B.ARTICO) INNER
JOIN RIGPRRRR AS C ON (B.RPRIGA=C.RPRIGA) AND (B.RPPRFA=C.RPPRFA) AND
(B.OPANNO=C.OPANNO) AND (B.OPNORD=C.OPNORD)) INNER JOIN ORDPRRRR AS D ON
(C.OPNORD=D.OPNORD) AND (C.OPANNO=D.OPANNO)
WHERE COCODI='040170' And D.ALLOCO='0616' And a.taclco In
('10','30','31','32','33','34','35','36','37','38','39','40') And DTSALD='
' And (b.dtqtpr-b.dtqtus-b.dtqtac)>0 And C.TAOPCO='0901'
           LA SECONDA:
SELECT a.cocodi AS Commessa, a.alloco AS Lista, a.artico AS CodArt,
c.artide AS DesArt, rcqtim AS Residuo
FROM rigclRRR AS a, ordclRRR AS b, anartRRR AS c
WHERE a.cocodi = '040170'                                          
   and a.alloco = '0616'                                            
   and a.rcstat = ' '                                               
   and a.rcqtim > 0                                                 
   and a.ocanno = b.ocanno                                          
   and a.ocnord = b.ocnord                                          
   and b.taorco = 'JX'                                              
   and a.artico = c.artico                                          
   and c.taclco in 
('10','30','31','32','33','34','35','36','37','38','39','40');
Ciao
grazie
Indriano
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

  codici identici  siano essi del medesimo recorset che dell'altro.
1) Anzichè UNION (che implica un distinct automatico), utilizza UNION 
ALL.
2) Racchiudi la select fra parentesi, assegna un alias, e utilizzala 
come se fosse una tabella.
3) Fanne un group by.
Ciao
Alberto

Albe V° ci ha detto :

4) leggendo la tua query: utilizza gli Inner Join anzichè i prodotti 
cartesiani filtrati a posteriori...
Ciao
Alberto

 Alberto
ringraziandoti immensamente per il primo punto ( ci credo.... mi sarò
risparmiato 15 giorni di spremute mentali,io faccio più l'amministratore
di rete, programmo raramente )
ed ingolosito dal risparmio di tempo (se risparmio gli altri 15 giorni
sono a cavallo, il preferie non lascia carico al dopo-ferie) ..... ho
l'ardire di chiedere....  come vedresti  il group by  ?
 chiamando per semplicità l'intera query  fra parentesi come  ( CAVALLO ) ?
Io sono già in commessa e lista che li passo da opportuna text box  , 
l'unica cosa che si differenzia 
è CODART  dove se uguale   devo descrivere un solo COMMESSA, LISTA ,
CODART stesso, DESART   e sommare  tutti i  RESIDUO ove uguali nel CODART.
In ogni caso grazie,  non posso invitarti alla macchinetta a bere 15 caffè
, come posso ricambiare ?


Indriano ha scritto:
        CE L'HO FATTA   ! ! ! ! !
Comunque senza il tuo aiuto sarebbe stato impossibile
SELECT commessa, lista, codart, desart, sum(residuo) AS QTARIM
FROM    (    CAVALLO  UNION ALL  MUCCA )  
GROUP BY commessa, lista, codart, desart;
Grazie   mille 
ciao


 , come posso ricambiare ?
Nessun problema, ti mando una Riba.
Alberto

Ho  festeggiato  troppo presto..........
la query mi funziona regolarmente in Access. Poi quando vado a leggere
dall'AS400 col visual basic  direttamente( quindi non più con Access) mi
dice che il driver ODBC non supporta le proprietà richieste.
Qualcuno ha qualche consiglio  ?
Ossia una cosa che non so ....su un recordset  temporaneo si può far
girare una select   col group by   o prima bisogna aver depositato la
query  con un INSERT INTO ?
Thank you


 query  con un INSERT INTO ?
Ti seguo sempre meno...
La query col group by la fai girare 'su' una subquery, non su 'un 
recordset'.
Il recordset sarà il risultato dell'operazione, non l'origine.
Inoltre, se la query deve girare su DB2, dovrai rispettare la sintassi 
di quest'ultimo, e non quella di Access.
Prova a postare la vera query, non quella col cavallo e la mucca, e 
vediamo...
Alberto

 Alberto
Questo ( in notazione sorgernte di visual basic, non query pura) è quello
che riesco a leggere via driver ODBC dall'AS400:
'SQL = "SELECT commessa, lista, codart, desart, sum(residuo) AS QTARIM
from (SELECT d.COCODI AS Commessa, D.ALLOCO AS Lista, A.ARTICO AS CodArt,
a.artide AS DesArt, (DTQTPR-DTQTUS-DTQTAC) AS Residuo " & _
'" FROM ((ANART00F AS A INNER JOIN DISPR00F AS B ON A.ARTICO=B.ARTICO)
INNER JOIN RIGPR00f AS C ON (B.OPNORD=C.OPNORD) AND (B.OPANNO=C.OPANNO)
AND (B.RPPRFA=C.RPPRFA) AND (B.RPRIGA=C.RPRIGA)) INNER JOIN ORDPR00F AS D
ON (C.OPANNO=D.OPANNO) AND (C.OPNORD=D.OPNORD)" & _
'" WHERE COCODI='" & TxtCommessa & "' And D.ALLOCO='" & TxtLista & "' And
a.taclco In  ('10','30','31','32','33','34','35','36','37','38','39','40')
And DTSALD=' ' And (b.dtqtpr-b.dtqtus-b.dtqtac)>0 And C.TAOPCO='0901' " & _
'" UNION ALL SELECT a.cocodi AS Commessa, a.alloco AS Lista, a.artico AS
CodArt, c.artide AS DesArt, rcqtim AS Residuo FROM rigcl00f AS a, ordcl00f
AS b, anart00f AS c " & _
'" WHERE a.cocodi = '" & TxtCommessa & "'  and a.alloco = '" & TxtLista &
"' and a.rcstat = ' '    and a.rcqtim > 0  and " & _
'" a.ocanno = b.ocanno  and a.ocnord = b.ocnord  and b.taorco = 'JX' and
a.artico = c.artico  and c.taclco in 
('10','30','31','32','33','34','35','36','37','38','39','40')) AS mucca  "
& _
'" GROUP BY  commessa , lista,  codart "
SQL = "SELECT d.COCODI AS Commessa, D.ALLOCO AS Lista, A.ARTICO AS CodArt,
a.artide AS DesArt, (DTQTPR-DTQTUS-DTQTAC) AS Residuo " & _
" FROM ((ANART00F AS A INNER JOIN DISPR00F AS B ON A.ARTICO=B.ARTICO)
INNER JOIN RIGPR00f AS C ON (B.OPNORD=C.OPNORD) AND (B.OPANNO=C.OPANNO)
AND (B.RPPRFA=C.RPPRFA) AND (B.RPRIGA=C.RPRIGA)) INNER JOIN ORDPR00F AS D
ON (C.OPANNO=D.OPANNO) AND (C.OPNORD=D.OPNORD)" & _
" WHERE COCODI='" & TxtCommessa & "' And D.ALLOCO='" & TxtLista & "' And
a.taclco In  ('10','30','31','32','33','34','35','36','37','38','39','40')
And DTSALD=' ' And (b.dtqtpr-b.dtqtus-b.dtqtac)>0 And C.TAOPCO='0901' " & _
" UNION ALL SELECT a.cocodi AS Commessa, a.alloco AS Lista, a.artico AS
CodArt, c.artide AS DesArt, rcqtim AS Residuo FROM rigcl00f AS a, ordcl00f
AS b, anart00f AS c " & _
" WHERE a.cocodi = '" & TxtCommessa & "'  and a.alloco = '" & TxtLista &
"' and a.rcstat = ' '    and a.rcqtim > 0  and " & _
" a.ocanno = b.ocanno  and a.ocnord = b.ocnord  and b.taorco = 'JX' and
a.artico = c.artico  and c.taclco in 
('10','30','31','32','33','34','35','36','37','38','39','40')"
Non mi funziona invece questa  in quanto il driver ODBC per alcune
condizioni non supporta il group by (avrebbe funzionato rimanendo in
ambiente AS400 ma io devo fare un programma visual basic) :
'SQL = "SELECT commessa, lista, codart, desart, sum(residuo) AS QTARIM
from (SELECT d.COCODI AS Commessa, D.ALLOCO AS Lista, A.ARTICO AS CodArt,
a.artide AS DesArt, (DTQTPR-DTQTUS-DTQTAC) AS Residuo " & _
'" FROM ((ANART00F AS A INNER JOIN DISPR00F AS B ON A.ARTICO=B.ARTICO)
INNER JOIN RIGPR00f AS C ON (B.OPNORD=C.OPNORD) AND (B.OPANNO=C.OPANNO)
AND (B.RPPRFA=C.RPPRFA) AND (B.RPRIGA=C.RPRIGA)) INNER JOIN ORDPR00F AS D
ON (C.OPANNO=D.OPANNO) AND (C.OPNORD=D.OPNORD)" & _
'" WHERE COCODI='" & TxtCommessa & "' And D.ALLOCO='" & TxtLista & "' And
a.taclco In  ('10','30','31','32','33','34','35','36','37','38','39','40')
And DTSALD=' ' And (b.dtqtpr-b.dtqtus-b.dtqtac)>0 And C.TAOPCO='0901' " & _
'" UNION ALL SELECT a.cocodi AS Commessa, a.alloco AS Lista, a.artico AS
CodArt, c.artide AS DesArt, rcqtim AS Residuo FROM rigcl00f AS a, ordcl00f
AS b, anart00f AS c " & _
'" WHERE a.cocodi = '" & TxtCommessa & "'  and a.alloco = '" & TxtLista &
"' and a.rcstat = ' '    and a.rcqtim > 0  and " & _
'" a.ocanno = b.ocanno  and a.ocnord = b.ocnord  and b.taorco = 'JX' and
a.artico = c.artico  and c.taclco in 
('10','30','31','32','33','34','35','36','37','38','39','40')) AS mucca  "
& _
'" GROUP BY  commessa , lista,  codart "
----
Con la prima query che passa il "collo di bottiglia" del driver ODBC 
ottengo ad esempio il seguente risultato nel recordset RST1:
40170	616	3000378	FILTENE DIAM.10 MM                      	4
40170	616	3001550	SPESSORE PER VETRO 32 X 100 X 4         ******	8
40170	616	3001678	SIGILL. DC 796 NERO BOMBOLETTE          	2
40170	616	
3100126
	218057 - APPOGGIO VETRO                 	8
40170	616	
3100267
	224539 - GUARNIZIONE CINGIVETRO 3/4 MM  =====	30
40170	616	4001675	UNI 6955 V. AUTOF. TSP 4,8 X 70 INOX A2 	8
40170	616	3001550	SPESSORE PER VETRO 32 X 100 X 4         ******	8
40170	616	3004611	ATTUATORE A CATENA TOPP C30 230V NERO   	4
40170	616	3004612	STAFFA BASCULANTE X M. FRONTALE NERA    	4
40170	616	3004613	STAFFA WASISTAS NERA                    	4
40170	616	
3100124
	218058 - APPOGGIO VETRO                 	8
40170	616	
3100267
	224539 - GUARNIZIONE CINGIVETRO 3/4 MM  =====	12
40170	616	4000025	UNI 6954 VITE 
AUTOF.TC
 4,8 X 22 INOX A2 	40
40170	616	4001095	UNI 6592 RONDELLA PIANA PER M 16 INOX A2	13
40170	616	4002358	UNI 6955 V. AUTOF. TSP 4,8 X 80 INOX A2 	15
Cosa mi rimane da fare non passando dall'ODBC  il group by ?
Sommare le quantità dei record con lo stesso codice che ho segnato prima
di passarli alla stampante delle etichette.
Ciao ed in ogni caso grazie,  mi sei stato prezioso.



io avrei dei dubbi anche sulla tua professione di "amministratore di
rete".
Magari sarai il solito amministratore che non sa andare oltre
all'installazione guidata di Windows Xp Home

 all'installazione guidata di Windows Xp Home
Ma che senso ha? Cosa mai ti avrà fatto?
-- 
Emanuele Torrenti, Registered Linux User #409659
http://torrenti.altervista.org
http://www.sitolecchino.com/Emanuele_Torrenti.html