salve Marco,
kingmob wrote:
Ciao a tutti/e. Non riesco a trovare una soluzione al seguente problema. Tra le varie colonne di una tabella, ho 3 campi che indicano 3 diversi costi, chiamiamoli CA, CB e CC. In altri tre campi ho le relative aliquote iva: IA, IB, IC. Quello che mi serve è trovare una query che mi raggruppi i dati in modo da avere la somma dei costi suddivisa per aliquota iva. Ovviamente le aliquote IA, IB e IC possono essere diverse tra loro anche all' interno della stessa riga. A me serverebbe un risultato del genere:
somma dei costi (CA+CB+CC) che hanno aliquota = 20
somma dei costi (CA+CB+CC) che hanno aliquota = 4
somma dei costi (CA+CB+CC) che hanno aliquota = 19
somma dei costi (CA+CB+CC) che hanno aliquota = 7
etc...
Qualcuno ha qualche idea!? A me proprio non viene in mente...
aiuta molto aggiungere alla richiesta anche il codice DDL ed alcuni comandi INSERT INTO che riproducano lo scenario semplificato da utilizzare.. aiuta molto anche sapere che DBMS tu stia utilizzando..
ad ogni modo, se ho compreso l'esigenza, di seguito un esempio basato su SQL Server che utilizza l'espressione CASE (disponibile in molti altri engine) per la valorizzazione dell'aggregazione, ritornando quindi una rotazione su colonna delle aliquote ricercate.. non ci sono tutte le permutazioni con tutte le aliquote ma ritengo risulti comunque semplice la completazione delle permutazioni, se necessaria..
SET NOCOUNT ON;
USE tempdb;
GO
CREATE TABLE dbo.t (
Id int NOT NULL IDENTITY PRIMARY KEY,
ca decimal(18,4) NOT NULL DEFAULT 0,
cb decimal(18,4) NOT NULL DEFAULT 0,
cc decimal(18,4) NOT NULL DEFAULT 0,
ia decimal(6,2) NOT NULL DEFAULT 0,
ib decimal(6,2) NOT NULL DEFAULT 0,
ic decimal(6,2) NOT NULL DEFAULT 0
);
GO
INSERT INTO dbo.t VALUES ( 20, 0, 0, 20, 0, 0 );
INSERT INTO dbo.t VALUES ( 0, 20, 0, 0, 20, 0 );
INSERT INTO dbo.t VALUES ( 0, 0, 20, 0, 0, 20 );
INSERT INTO dbo.t VALUES ( 4, 0, 0, 4, 0, 0 );
INSERT INTO dbo.t VALUES ( 0, 4, 0, 0, 4, 0 );
INSERT INTO dbo.t VALUES ( 0, 0, 4, 0, 0, 4 );
INSERT INTO dbo.t VALUES ( 10, 0, 0, 10, 0, 0 );
INSERT INTO dbo.t VALUES ( 0, 10, 0, 0, 10, 0 );
INSERT INTO dbo.t VALUES ( 0, 0, 10, 0, 0, 10 );
INSERT INTO dbo.t VALUES ( 20, 4, 10, 20, 4, 10 );
INSERT INTO dbo.t VALUES ( 4, 10, 20, 4, 10, 20 );
INSERT INTO dbo.t VALUES ( 10, 20, 4, 10, 20, 4 );
GO
SELECT
SUM(
CASE WHEN ia = 4 THEN ca ELSE 0 END
+ CASE WHEN ib = 4 THEN cb ELSE 0 END
+ CASE WHEN ic = 4 THEN cc ELSE 0 END
) AS [Somma 4%],
SUM(
CASE WHEN ia = 10 THEN ca ELSE 0 END
+ CASE WHEN ib = 10 THEN cb ELSE 0 END
+ CASE WHEN ic = 10 THEN cc ELSE 0 END
) AS [Somma 10%],
SUM(
CASE WHEN ia = 19 THEN ca ELSE 0 END
+ CASE WHEN ib = 19 THEN cb ELSE 0 END
+ CASE WHEN ic = 19 THEN cc ELSE 0 END
) AS [Somma 19%],
SUM(
CASE WHEN ia = 20 THEN ca ELSE 0 END
+ CASE WHEN ib = 20 THEN cb ELSE 0 END
+ CASE WHEN ic = 20 THEN cc ELSE 0 END
) AS [Somma 20%]
FROM dbo.t;
GO
DROP TABLE dbo.t;
--<------
Somma 4% Somma 10% Somma 19% Somma 20%
-------
---------
--------
----------
24.0000 60.0000 0.0000 120.0000
saluti