Query aggiornamento con dati da altra query

venerdì 05 settembre 2008 - 00.12

flight Profilo | Newbie

Ciao a tutti, sono nuovo del forum e questo è il mio primo post.
Veniamo al problema: sto modificando un db in access di un amico e dovrei eseguire l'aggiornamento di un campo di una tabella prendendo i dati da una seconda query.

La prima query seleziona alcun valori da varie tabelle in base a un arco di tempo inserito tramite una maschera e calcola la somma del campo qta basata su un raggruppamento fatto sul campo Articolo

Data Articolo Somma: sum(Qta)
11/05/08 Pippo 50
12/05/08 Minnie 25


La seconda query dovrebbe aggiornare i dati di una tabella sottraendo la Somma all'articolo corrispondente.

es, da così:

Articolo Qta
Pippo 200
Pippo 100
Minnie 300

a così, prendendo come dati da sottrarre quelli della prima query

Articolo Qta
Pippo 150
Pippo 100
Minnie 275

Ho provato con alcune soluzioni trovate in rete ma non ho ottenuto alcun risultato. Alcuni dicono che si può fare con un'unica query ma non ci sono riuscito causa errori di sintassi.

aabruzzese Profilo | Junior Member

Ciao,
Scusami perche io in Italiano ormai non scrivo pui da tanti anni, ma cmq.

Poi provare di fare un UPDATE con una SubQuery sul campo da aggiornare.

Essempio semplice:

UPDATE employee
SET salary = (SELECT AVG(salary) FROM employee);

Prova qualcosa di semplice al innizio.

Ciao
Angelo

Angelo Abruzzese

flight Profilo | Newbie

Intanto grazie per la risposta. Ho provato a fare alcune prove e funziona tutto quando la cosa è semplice è quando la complico che le cose non vanno.
Inizialmente avevo fatto così:

UPDATE tArticoliU SET tArticoliU.Litri = tArticoliU.Litri-(SELECT tDDT.Data, tVociDDT.IdArticolo, Sum([quantità]*[LitriXunità]) AS TotLitri
FROM tDDT INNER JOIN (tContenitori INNER JOIN tVociDDT ON tContenitori.Id = tVociDDT.UM) ON tDDT.Numero = tVociDDT.NumeroDDT
GROUP BY tDDT.Data, tVociDDT.IdArticolo
HAVING (((tDDT.Data)=Date())))
WHERE (((tArticoliU.IdArticolo)=IdArticolo));

Ma la cosa non va perchè nella sottoquery la select deve avere un solo campo, quaindi l'ho modificata così:

UPDATE tArticoliU SET tArticoliU.Litri = tArticoliU.Litri-(SELECT Sum([quantità]*[LitriXunità]) AS TotLitri
FROM tDDT INNER JOIN (tContenitori INNER JOIN tVociDDT ON tContenitori.Id = tVociDDT.UM) ON tDDT.Numero = tVociDDT.NumeroDDT
GROUP BY tDDT.Data, tVociDDT.IdArticolo
HAVING (((tDDT.Data)=Date())))
WHERE (((tArticoliU.IdArticolo)=IdArticolo));

Ma mi da l'errore: Per l'operazione è necessaria una query aggiornabile.
Dove sbaglio?

aabruzzese Profilo | Junior Member


Ciao,

Dimmi non si tratta di diritti di accesso ?


Angelo Abruzzese

flight Profilo | Newbie

Non credo in quanto con delle query semplici mi modifica tranquillamente i dati della tabella. Forse sbaglio sintassi, ma non saprei come altro fare. Con 2 query separate non fa nulla anzi chide i parametri di aggiornamento con delle textbox (questo credo lo faccia perchè non riesce a prelevare i dati dalla prima query che selezioni i dati da aggiornare), con una singola da errore. Non so più cosa fare.

aabruzzese Profilo | Junior Member


Ai provato la subquery da solo per vedere che in fatto ti risultano delle righe?

Io vado sempre con TRIAL and ERRROR fino a quando si riesce a indovinare dove e il problema.


Angelo Abruzzese

flight Profilo | Newbie

Certo! Ho provato e la subquery e funziona benissimo! Il problema sta nella query di update.
Ritenterò questo week-end e vedo se riesco a fare qualcosa.
Intanto grazie per il supporto.
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5