Torna al Thread

USE tempdb; GO -- creazione e popolamento oggetti di esempio CREATE TABLE dbo.Nominativi ( CodiceNome int NOT NULL PRIMARY KEY CLUSTERED , Cognome varchar(30) NOT NULL , Nome varchar(30) NOT NULL , Perc decimal(5,2) NOT NULL -- non usare real se puoi, è a virgola mobile e potresti trovarti arrotondamenti indesiderati ) GO INSERT INTO dbo.Nominativi (CodiceNome, Cognome, Nome, Perc) VALUES (1, 'Rossi', 'Mario', 25) , (2, 'Verde', 'Roberto', 35) , (3, 'Bianco', 'Remo', 22) , (4, 'Giallo', 'Michele', 18) GO -- CREATE TABLE dbo.Provvigioni ( CodiceProv int NOT NULL PRIMARY KEY CLUSTERED , Causale varchar(100) NOT NULL , Importo decimal(18,2) NOT NULL ) GO INSERT INTO dbo.Provvigioni (CodiceProv, Causale, Importo) VALUES (1, 'Ricavo per prestazione x', 1000) , (2, 'Ricavo per prestazione y', 800) , (3, 'Ricavo per prestazione z', 1500) , (4, 'Ricavo per prestazione w', 700) GO -- CREATE TABLE dbo.Riparto ( CodiceRip int IDENTITY(1, 1) NOT NULL PRIMARY KEY CLUSTERED , CodiceNome int NOT NULL , Perc decimal(5, 2) NOT NULL , ImpRip decimal(18,2) NOT NULL ) GO -- inserisco un codice nome per effettuare poi l'update INSERT INTO dbo.Riparto (CodiceNome, ImpRip, Perc) VALUES (3, 500, 100) -- test dato aggiunto SELECT * FROM dbo.Riparto -- alla pressione del pulsante è sufficiente questo statement (SQL Server 2008 o successive, non 2000 o 2005): -- seleziono la provvigione (si può parametrizzare tramite l'ausilio di stored procedure o quesry parametriche), uso la variabile solo a titolo di esempio DECLARE @Provvigione int = 3 DECLARE @ImportoDaDividere decimal(18, 2) SELECT @ImportoDaDividere = SUM(Importo) FROM dbo.Provvigioni WHERE CodiceProv = @Provvigione MERGE dbo.Riparto DEST USING dbo.Nominativi SORG ON (SORG.CodiceNome = DEST.CodiceNome) WHEN MATCHED THEN UPDATE SET ImpRip = @ImportoDaDividere / 100 * SORG.Perc WHEN NOT MATCHED THEN INSERT (CodiceNome, Perc, ImpRip) VALUES (SORG.CodiceNome, SORG.Perc, @ImportoDaDividere / 100 * SORG.Perc); -- resultset finale SELECT * FROM dbo.Riparto DROP TABLE dbo.Nominativi DROP TABLE dbo.Provvigioni DROP TABLE dbo.Riparto GO
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5