AIUTOOO !!! SQL Server 2005 - sommare giacenze di magazzino

di il
1 risposte

AIUTOOO !!! SQL Server 2005 - sommare giacenze di magazzino

AIUTOOO !!! SQL Server 2005 - sommare giacenze di magazzino dopo aver valutato alcune condizioni

Buon pomeriggio a tutti,

ho il seguente problema:
Database SQL Server 2005 con 2 tabelle. Le tabelle vengono alimentate da 2 file flat .txt estratti da un gestionale del mio cliente e caricati nel mio DB tramite SSIS.

1) Creo “Tabella1”
CREATE TABLE [dbo].[Tabella1](
[idContatoreRiga] [int] IDENTITY(1,1) NOT NULL,
[idArticolo] [nvarchar](15) COLLATE Latin1_General_CI_AS NULL,
[Giacenza] [numeric](18, 2) NULL
) ON [PRIMARY]

idArticolo = codice articolo del prodotto
Giacenza = giacenza a magazzino del codice articolo prodotto

2) Popolo “Tabella1” (ora solo con 9 record ma in realtà ne conterrà circa 450.000)

INSERT INTO Tabella1 ( idArticolo, Giacenza)
VALUES (1111111111, 20.00)
INSERT INTO Tabella1 ( idArticolo, Giacenza)
VALUES (2222222222, 40.00)
INSERT INTO Tabella1 ( idArticolo, Giacenza)
VALUES (3333333333, 50.00)
INSERT INTO Tabella1 ( idArticolo, Giacenza)
VALUES (4444444444, 20.00)
INSERT INTO Tabella1 ( idArticolo, Giacenza)
VALUES (5555555555, 2.00)
INSERT INTO Tabella1 ( idArticolo, Giacenza)
VALUES (6666666666, 30.00)
INSERT INTO Tabella1 ( idArticolo, Giacenza)
VALUES (7777777777, 12.00)
INSERT INTO Tabella1 ( idArticolo, Giacenza)
VALUES (8888888888, 25.00)
INSERT INTO Tabella1 ( idArticolo, Giacenza)
VALUES (9999999999, 33.00)

3) SELECT “Tabella1”
idContatoreRiga idArticolo Giacenza
--------------- --------------- ---------------------------------------
1 1111111111 20.00
2 2222222222 40.00
3 3333333333 50.00
4 4444444444 20.00
5 5555555555 2.00
6 6666666666 30.00
7 7777777777 12.00
8 8888888888 25.00
9 9999999999 33.00

(Righe interessate: 9)

4) Creo “Tabella2”
CREATE TABLE [dbo].[Tabella2](
[idContatoreRiga] [int] IDENTITY(1,1) NOT NULL,
[idArticoloA] [nvarchar](15) COLLATE Latin1_General_CI_AS NULL,
[idArticoloB] [nvarchar](15) COLLATE Latin1_General_CI_AS NULL,
[Intercamb] [nchar](3) COLLATE Latin1_General_CI_AS NULL,
[Status] [nchar](2) COLLATE Latin1_General_CI_AS NULL
) ON [PRIMARY]

idArticoloA = codice articolo prodotto sostituito
idArticoloB = codice articolo prodotto sostituivo di idArticoloA
Intercambiab = codice intercambiabilità
Status = codice status


5) Popolo “Tabella2” (ora solo con 9 record in realtà ne conterrà circa 8.000)

INSERT INTO Tabella2 (idArticoloA, idArticoloB, Intercamb, Status)
VALUES (1111111111, 5555555555, 1, 20)
INSERT INTO Tabella2 (idArticoloA, idArticoloB, Intercamb, Status)
VALUES (2222222222, 7777777777, 1, 40)
INSERT INTO Tabella2 (idArticoloA, idArticoloB, Intercamb, Status)
VALUES (3333333333, 5555555555, 1, 20)
INSERT INTO Tabella2 (idArticoloA, idArticoloB, Intercamb, Status)
VALUES (3333333333, 7777777777, 1, 40)
INSERT INTO Tabella2 (idArticoloA, idArticoloB, Intercamb, Status)
VALUES (4444444444, 1111111111, 2, 50)
INSERT INTO Tabella2 (idArticoloA, idArticoloB, Intercamb, Status)
VALUES (7777777777, 8888888888, 1, 20)
INSERT INTO Tabella2 (idArticoloA, idArticoloB, Intercamb, Status)
VALUES (2222222222, 9999999999, 1, 40)

6) SELECT “Tabella2”
id idArticoloA idArticoloB Intercamb Status
----------- --------------- --------------- --------- ------
1 1111111111 5555555555 1 20
2 2222222222 7777777777 1 40
3 3333333333 5555555555 1 20
4 3333333333 7777777777 1 40
5 4444444444 1111111111 2 50
6 7777777777 8888888888 1 20
7 2222222222 9999999999 1 40


(Righe interessate: 6)

7) Obiettivo da raggiungere:

idArticoloB identifica un articolo/parte di ricambio in una logica di “riparazione di un componente rotto” e può sostituire idArticoloA.

Nella “Tabella2” se idArticoloA (articolo sostituito) ha un idArticoloB con “Intercamb = 1 e Status = 20 or 40” (articolo sostitutivo) devo sommare la giacenza di idArticoloA a quella di idArticoloB azzerando alla fine del ciclo la giacenza di idArticoloA ! idArticoloB si porta a casa la giacenza di idArticoloA.

Come si può vedere dalla select della Tabella2 ho però alcune eccezioni da gestire:
ESEMPI

1) record con id = 2 e 7 (stesso idArticoloA) ha ben 2 idArticoloB entrambi con Intercamb = 1 e Status = 40 ! Quale prendo mi direte voi ??? In questo caso devo verificare 2 condizioni: 1° se uno dei due “idArticoloB” per caso inizia con il carattere “P” lo prendo altrimenti (anche se per esempio entrambi iniziano con la “P”) passo alla 2° condizione, vado a verificare nella “Tabella1” quale dei due “idArticoloB” ha giacenza <> 0 (zero): se entrambi hanno giacenza = 0 oppure <> 0 non faccio nulla, chiudo il ciclo e segnalo il caso al cliente in fase di output con un report.

2) record con id = 2 e 4 vengono sostituiti da un idArticoloB = 7777777777 che ha tutti i requisiti per farlo però anch’ esso a sua volta ha un sostitutivo (8888888888) vedi id = 6 !!! Questa è una eccezione del gestionale del cliente…. Come la gestisco mi direte voi ?! Considero 8888888888 come sostitutivo di 7777777777 anche se quest’ ultimo ha Intercamb = 1 e Status = 40 !

Posso tranquillamente creare una terza tabella (Tabella3) all’ interno della quale mettere il risultato dell’ elaborazione oppure posso creare un campo aggiuntivo all’ interno della Tabella1. Non ha importanza…..

Mi scuso, capisco che non è una elaborazione facile !
Ho provato con delle query di UPDATE ma non ci sono riuscito ! Prima di creare una routtine VB.net, che mi porterà via parecchio tempo, vi chiedo un consiglio sulla soluzione da adottare per gestire questo processo valutando ogni eccezione
SSIS ? T-SQL ? STORED PROCEDURE ? Codice VB.net ?

Grazie molte in anticipo a coloro che mi aiuteranno.

Mark

1 Risposte

  • Re: AIUTOOO !!! SQL Server 2005 - sommare giacenze di magazzino

    Ciao,
    se ho ben capito quello che devi fare sono delle somme delle giacenze ma perse singolarmente.....
    mandami il db in access con le specifiche che lo guardo meglio e poi ti dico
    mandalo a davidenava85 at gmail punto com
    ciao
Devi accedere o registrarti per scrivere nel forum
1 risposte