Jump to content

ACCESS 2007 utilizzo della SELECT


ravasiolorenzo

Recommended Posts

Ciao a tutti! sono nuovo di questo forum e volevo chiedervi già un favore.

 

sto facendo in access un daabatabe per il mio capo.. molto semplice piccola azienda quindi di utilizzo limitato ma trovo difficoltà nello sviluppare una sua richiesta. in una maschera di riassunto finale devo potergli mostrare tutti i costi (ovvero - costo materiali, costo lavorazioni esterne, costo trattamenti termici), il prezzo di vendita della commessa, il totale delle spese e il guadagno.. fino a qui tutto ok.

 

inoltre lui mi ha richiesto di aggiungere un al' altro tipo di spesa ovvero COSTO LAVORAZIONE OPERAI.

io ho una tabella lavorazioni (con ID,nomelavorazione,costoorario) e una lavorazioni_eseguite, con dentro nome dipendente commessa lavorazione e ore di lavorazione..

 

io devo poter trovare tutte le lavorazioni fatte su una commessa (quindi con una normale SELECT) e qua ok ma poi devo moltiplicare le ore per ogni costoorario della lavorazione ad esse annessa! ovvero se io per una commessa faccio 3 ore dilavorazione1,5 di lavorazione2 ecc alla fine devo poter ottenere questo risultato:

tot=(costoorario1 * oredilavorazione1) + (costoorario2 * oredilavorazione2) + ..ecc

 

ma non riesco a trovare una combinazione giusta di SQL che renda possibile questa cosa!

mi sono impuntato sulla SELECT ma non so se è corretta perche so che può restituire solo valori ma se faccio DoCmd.RunSQL(stringa) mi dice "prevista function o variabile" eppure tutte le librerie sono presenti per utilizzo anche INSERT INTO ecc..non riesco proprio a capire come sviluppare questa parte di programma!

per favore aiuto!

Link to comment
Share on other sites

Ciao, a primo sguardo quello che vuoi fare è complicato dal fatto che manca almeno una tabella, che è in realtà una relazione N,N tra tabella_lavorazione e lavorazione_eseguite. Come fai a legare l'ID della tabella lavorazioni alle ore lavorate per una data commessa?

 

Quando hai progettato il DB hai utilizzato una metodologia formale per la realizzazione o sei andato a intuito?

 

Ovviamente in quanto stiamo parlando di query devi fare una SELECT su qualcosa ma a naso credo che nel tuo caso siano query annidate

 

Considera che sono anni che di lavoro molto con l'SQL, quindi la query sotto potrebbe non essere ottimizzata, in ogni caso dovresti fare qualcosa del tipo (ti metto gli schemi usati da me ma ovviamente per te sarà diverso anche perchè manca una relazione).

 

CREATE TABLE costi(ID int,orelavorate int);

CREATE TABLE costoore(ID int,costoora int);

 

 

Prima query, conto totale delle ore per la stessa operazione (che è rappresentata da ID, viene da se che ID in ore è chiave primaria, in costi non)

 

SELECT ID, SUM(orelavorate) as orelavorate FROM costi GROUP BY ID

 

Questo ritorna la somma delle ore della stessa lavorazione, a questo punto si annida la query con un'altra di moltiplicazione

 

 

SELECT costoore.ID, costoore.costoora*costi.orelavorate AS parziale FROM costoore, (SELECT ID, SUM(orelavorate) as orelavorate FROM costi GROUP BY ID) AS costi WHERE costi.ID=ore.ID

Questa seconda query che annida la prima ti ritorna un elenco di costi veri (Xore * costo orario) mostrandoti anche l'ID

Puoi vedere l'esempio fatto al volo qui http://sqlfiddle.com/#!9/23792/2 dove c'è sia il concetto di somma che prodotto. C'è una leggera differenza nel fatto che nell'esempio costoore l'ho chiamato ore solo per velocità ma quando ho poi scritto qui mi sono reso conto che magari era equivocabile

 

Come ti dicevo però nel tuo testo mancano delle informazioni, ovvero la relazione tra la tabella con i costi orari e quella con le lavorazioni. Questo esempio che ti ho fatto è concettualmente quello che devi andare a fare tu ma potrebbe mancare una condizione di WHERE o HAVING a seconda di come strutturi la query e manca una JOIN quasi di sicuro. Insomma as is non funziona ma dovrebbe darti la soluzione del problema.

 

Ivan

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...