Aggiornare più record di una tabella selezionando valori da altre

lunedì 17 maggio 2010 - 19.18

jtpsala Profilo | Senior Member

Saluto tutti gli utenti del Forum.

In un database SQL ho due tabella, una chiamata chiamata Articoli composta da campi tipo (Codice, Descrizione, Quantità, ecc...) e l'altra chiamata AppoggioLavori avente campi simili nella quale aggiungo tramite query da VB 2008 degli articoli selezionati dalla prima tabella.

Alla fine del completamento del "lavoro" avrei la necessità di sommare le quantità degli articoli presenti nella tabella AppoggioLavori ed il risultato aggiornarlo nella tabella Articoli.
Ho effettuato delle prove in questo modo:

UPDATE Articoli SET QuantitàDaInstallare = QuantitàDaInstallare + (SELECT SUM(Quantità) FROM AppoggioOrdini WHERE CodicePadre = Articoli.Codice AND Codice = '" & Filtro & "' GROUP BY CodicePadre, Codice)

ma in presenza di dati multipli ad esempio il codice articolo ripetuto in più righe, vengono restituiti degli errori.
Qualcuno può darmi un aiuto?

Vi ringrazio tutti in anticipo.

Pippo

lbenaglia Profilo | Guru

>In un database SQL ho due tabella, una chiamata chiamata Articoli
>composta da campi tipo (Codice, Descrizione, Quantità, ecc...)
>e l'altra chiamata AppoggioLavori avente campi simili nella quale
>aggiungo tramite query da VB 2008 degli articoli selezionati
>dalla prima tabella.

Ciao Giuseppe,

Che DBMS utilizzi? (SQL è un linguaggio comune a molti DBMS).

>Qualcuno può darmi un aiuto?
Posta i comandi di CREATE TABLE delle tabelle completi di constraints, alcune righe di prova (INSERT INTO) ed il result set finale che intendi ottenere con quei dati.

>Vi ringrazio tutti in anticipo.
Prego.

Ciao!

--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

jtpsala Profilo | Senior Member

Grazie Lorenzo per la celerità nel "soccorso!"...

Utilizzo SQL Server 2008 Express.

Ecco il codice dlla Create Table della Tabella "Articoli":

USE [Job2010]
GO
/****** Oggetto: Table [dbo].[Articoli] Data script: 05/17/2010 20:30:46 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Questa è invece quella della tabella AppoggioLavori:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

In pratica vengono inseriti degli articoli (presenti nella tabella Articoli ed ogni articolo ha un suo codice univoco esempio: ARTCL1, ARTCL2, ecc...) nella tabella AppoggioLavori. In questa tabella possono trovarsi anche gli stessi articoli ripetuti più volte a secondo dello stato di avanzamento del lavoro (esempio oggi serve una cassetta identificata nella tabella Articoli con il codice ARTCL1, domani ne serve ancora 2 e cosi via). Di questi articoli inseriti però, devo vedere la quantità necessaria da ordinare se non basta quella già presente nel magazzino (tabella Articoli). Allora dovrei costruire una query che raggruppa tutti gli articoli presenti nella tabella AppoggioLavori, effettuare la somma della loro quantità ed infine eseguire un Update della quantità in ordinazione nella tabella Articoli in base al codice dell'articolo.

Le prove finora eseguite non mi hanno portato ad un risultato accetabile. Al momento sto facendo in questo modo:
Effettuo una Insert in una tabella di appoggio al fine di poter raggruppare i vari codici articolo ed effettuare la somma delle loro quantità in questo modo:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Dopo di che effettuo l'aggiornamento delle quantità nella tabella Articoli in questo modo:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

ma è proprio qui che la query aggiorna le varie quantità associate al codice dell'articolo però inserisce NULL nelle quantità dei restanti articoli quelli non compresi nella ricerca (esempio devo aggiornare gli articoli contraddistinti dal codice "ARTCL1 e ARTCL2" e questi vengono aggiornati regolarmente, ma "ARTC3 e così via vengono aggiornati ugualmente con quantità NULL)...

Spero di aver fatto capire cosa intendo fare e dove trovo il problema...

Grazie ancora.
Pippo

lbenaglia Profilo | Guru

>Grazie Lorenzo per la celerità nel "soccorso!"...
Prego, ma mancano i comandi di INSERT ed il result set atteso con quei dati.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

jtpsala Profilo | Senior Member

Scusami,

Ecco l'insert della tabella AppoggioLavori:

INSERT INTO [Job2010].[dbo].[AppoggioLavori] ([Codice] ,[CodicePadre] ,[Marca] ,[Descrizione] ,[Colore] ,[Quantità] ,[UnitàMisura] ,[Iva] ,[PrezzoPubblico] ,[VerificaInserimento] ,[VerificaStato] ,[Famiglia] ,[MinutiInstallazione]) VALUES (<Codice, nvarchar(50),> ,<CodicePadre, nvarchar(50),> ,<Marca, nvarchar(50),> ,<Descrizione, nvarchar(200),> ,<Colore, nvarchar(50),> ,<Quantità, numeric(18,0),> ,<UnitàMisura, nvarchar(10),> ,<Iva, numeric(18,0),> ,<PrezzoPubblico, numeric(18,2),> ,<VerificaInserimento, nvarchar(50),> ,<VerificaStato, nvarchar(50),> ,<Famiglia, nvarchar(100),> ,<MinutiInstallazione, numeric(18,0),>)

Ed ecco quella della tabella Articoli:

INSERT INTO [Job2010].[dbo].[Articoli] ([Codice] ,[Marca] ,[Descrizione] ,[Colore] ,[Quantità] ,[UnitàMisura] ,[QuantitàMinima] ,[Iva] ,[PrezzoAcquisto] ,[PrezzoPubblico] ,[TotalePrezzoAcquisto] ,[TotalePrezzoPubblico] ,[Data] ,[Note] ,[Ordini] ,[Fornitore] ,[CodiceFornitore] ,[VerificaOrdine] ,[QuantitàDaOrdinare] ,[Famiglia] ,[MinutiInstallazione] ,[QuantitàDaInstallare]) VALUES (<Codice, nvarchar(50),> ,<Marca, nvarchar(50),> ,<Descrizione, nvarchar(200),> ,<Colore, nvarchar(50),> ,<Quantità, numeric(18,0),> ,<UnitàMisura, nvarchar(10),> ,<QuantitàMinima, numeric(18,0),> ,<Iva, numeric(18,0),> ,<PrezzoAcquisto, numeric(18,2),> ,<PrezzoPubblico, numeric(18,2),> ,<TotalePrezzoAcquisto, numeric(18,2),> ,<TotalePrezzoPubblico, numeric(18,2),> ,<Data, datetime,> ,<Note, text,> ,<Ordini, nvarchar(20),> ,<Fornitore, nvarchar(200),> ,<CodiceFornitore, nvarchar(50),> ,<VerificaOrdine, numeric(18,0),> ,<QuantitàDaOrdinare, numeric(18,0),> ,<Famiglia, nvarchar(100),> ,<MinutiInstallazione, numeric(18,0),> ,<QuantitàDaInstallare, numeric(18,0),>)

Questo è l'esito che ottengo dalla mia query:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra
Pippo
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