PDA

Visualizza la versione completa : SQL eseguire somma di valori su righe diverse


silgmaris
24-02-2020, 11:23
Ciao a tutti,
perdonatemi ma non ne vengo a capo.

Ho un database (sul quale non posso fare modifiche) che contiene dati in questo formato.


Nome
Qty
Data


A
10
01/01/2020


A
8
02/01/2020


A
12
03/01/2020


B
20
01/01/2020


B
18
02/01/2020


B
16
03/01/2020


C
30
01/01/2020


C
40
02/01/2020


C
50
03/01/2020




Dal quale ho bisogno di sommare le qty di A e B per ogni giorno e il totale dividerlo per il valore di C.
Come faccio?!?

Grazie in anticipo!

optime
24-02-2020, 13:47
di quale sql stiamo parlando?

silgmaris
24-02-2020, 16:59
E' un Microsfot SQL Server.

nman
28-02-2020, 00:03
SQL eseguire somma di valori su righe diverse
........ sommare le qty di A e B per ogni giorno e il totale dividerlo per il valore di C. .........

Comincia a portare i valori sulla stessa riga
SELECT Sum( CASE WHEN Nome = 'A' THEN Qty ELSE 0 END ) , .......... FROM NomeTabella GRIOP BY Data ;


Naturalmente se nel campo "Nome" hai altri valori oltre ad A, B, oppure C allora cambia tutto

.

marino51
28-02-2020, 10:42
DECLARE @tbl TABLE
(
Qta float
, Cod_Art varchar(20)
, DDif varchar(20)
);

INSERT INTO @tbl ( Cod_Art, Qta, DDif )
SELECT 'A', 10, '01/01/2020' UNION ALL
SELECT 'A', 8 , '02/01/2020' UNION ALL
SELECT 'A', 12, '03/01/2020' UNION ALL
SELECT 'B', 20, '01/01/2020' UNION ALL
SELECT 'B', 18, '02/01/2020' UNION ALL
SELECT 'B', 16, '03/01/2020' UNION ALL
SELECT 'C', 30, '01/01/2020' UNION ALL
SELECT 'C', 40, '02/01/2020' UNION ALL
SELECT 'C', 50, '03/01/2020';

SELECT DDif, sum(Qta) AS Qta FROM @tbl WHERE Cod_Art = 'A' OR Cod_Art = 'B' GROUP BY DDif;

SELECT DDif, sum(Qta) AS Qta FROM @tbl WHERE Cod_Art = 'C' GROUP BY DDif;

SELECT DDif, sum(Qta) / (
SELECT sum(Qta) AS Qta FROM @tbl t2 WHERE Cod_Art = 'C' AND t1.DDif = t2.DDif GROUP BY DDif )
AS Qta FROM @tbl t1 WHERE Cod_Art = 'A' OR Cod_Art = 'B' GROUP BY DDif;

la prima select restituisce (per controllo)
01/01/2020 30
02/01/2020 26
03/01/2020 28

la seconda select restituisce (per controllo)
01/01/2020 30
02/01/2020 40
03/01/2020 50

la terza select restituisce il risultato
01/01/2020 1
02/01/2020 0,65
03/01/2020 0,56

nman
29-02-2020, 10:08
DECLARE @tbl TABLE
(
Qta float
, Cod_Art varchar(20)
, DDif varchar(20)
);


INSERT INTO @tbl ( Cod_Art, Qta, DDif )
VALUES
('A', 10, '01/01/2020'),
('A', 8 , '02/01/2020'),
('A', 12, '03/01/2020'),
('B', 20, '01/01/2020'),
('B', 18, '02/01/2020'),
('B', 16, '03/01/2020'),
('C', 30, '01/01/2020'),
('C', 40, '02/01/2020'),
('C', 50, '03/01/2020')
;




SELECT
DDif,
SUM(CASE WHEN Cod_Art = 'A' THEN Qta ELSE 0 END) AS Ax,
SUM(CASE WHEN Cod_Art = 'B' THEN Qta ELSE 0 END) AS Bx,
SUM(CASE WHEN Cod_Art = 'C' THEN Qta ELSE 0 END) AS Cx,
((SUM(CASE WHEN Cod_Art = 'A' THEN Qta ELSE 0 END)) + (SUM(CASE WHEN Cod_Art = 'B' THEN Qta ELSE 0 END))) / (SUM(CASE WHEN Cod_Art = 'C' THEN Qta ELSE 0 END)) AS Raoporto
FROM @tbl
GROUP BY
DDif
;

silgmaris
03-03-2020, 18:23
Intanto grazie, ci provo!

Loading