>Nel caso in cui non ho nè 001, nè 005, nè 006 metto di default
>001.
Ho aggiunto qualche riga in più al tuo esempio in modo da avere due articoli con rispettivamente il codice magazzino '005' e '006' senza '001'.
Ti allego una soluzione basata su due UPDATE: la prima aggiorna i codici magazzino '001', '005' e '006' mentre la seconda tutti gli altri:
INSERT dbo.MagDef(CodArticolo,Magazzino,Giacenza) VALUES ('5555555555', '005', 78);
INSERT dbo.MagDef(CodArticolo,Magazzino,Giacenza) VALUES ('5555555555', 'DR5', 89);
INSERT dbo.MagDef(CodArticolo,Magazzino,Giacenza) VALUES ('6666666666', 'GK3', 33);
INSERT dbo.MagDef(CodArticolo,Magazzino,Giacenza) VALUES ('6666666666', '006', 48);
UPDATE dbo.MagDef
SET MagDefinitivo = Magazzino
WHERE Magazzino IN('001', '005', '006');
WITH CTE_GetMagCode(CodArticolo, MagDefinitivo) AS
(
SELECT
CodArticolo
, CASE
WHEN MIN(Magazzino) NOT IN('001', '005', '006') THEN '001'
ELSE MIN(Magazzino)
END
FROM dbo.MagDef
GROUP BY CodArticolo
)
UPDATE dbo.MagDef
SET MagDefinitivo = CTE.MagDefinitivo
FROM dbo.MagDef AS M
JOIN CTE_GetMagCode AS CTE
ON M.CodArticolo = CTE.CodArticolo
WHERE M.MagDefinitivo IS NULL;
SELECT *
FROM dbo.MagDef;
/* Output:
ID CodArticolo Magazzino Giacenza MagDefinitivo
----------- --------------- --------- --------- -------------
1 1111111111 001 10.00 001
2 1111111111 006 20.00 006
3 1111111111 005 100.00 005
4 1111111111 Y50 55.00 001
5 2222222222 001 14.00 001
6 2222222222 006 19.00 006
7 2222222222 007 25.00 001
8 3333333333 006 32.00 006
9 3333333333 001 70.00 001
10 3333333333 D99 9.00 001
11 4444444444 D99 55.00 001
12 4444444444 Y50 55.00 001
13 5555555555 005 78.00 005
14 5555555555 DR5 89.00 005
15 6666666666 GK3 33.00 006
16 6666666666 006 48.00 006
(16 row(s) affected)
*/
DROP TABLE dbo.MagDef;
>Ciao e grazie.
Prego.
Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org