>allora io vorrei
>
>SV Mese assenteismo
>---- -------- ---------------
>sanfra1976 092008 3.5
Boh, con i dati che hai postato io ottengo un risultato ben diverso:
USE tempdb;
CREATE TABLE dbo.GIORN_MESE (
CF_OP char(16) NOT NULL ,
MESE char(7) NOT NULL ,
ORE_ASSENZA decimal(6, 2) NULL ,
ASSENTEISMO decimal(6, 3) NULL ,
ORE_TOT decimal(6, 2) NULL
);
CREATE TABLE dbo.SV_MERITO (
SV char(16) NOT NULL ,
Mese char(7) NOT NULL ,
ID_Gruppo char (7) NOT NULL ,
ResaMedia decimal(6, 2) NULL ,
SlaMedio decimal(9, 2) NULL ,
Ko_qualita bit NULL
);
CREATE TABLE dbo.UT_MERITO (
OP char(16) NOT NULL ,
Mese char(7) NOT NULL ,
ID_GRUPPO char(7) NOT NULL,
);
INSERT dbo.GIORN_MESE VALUES
('PIPPO', '012009', 22.5, 0.273, 82.5)
, ('PIPPO', '022009', 40, 0.5, 80)
, ('PIPPO', '092008', 3.5, 0.04, 87);
INSERT dbo.SV_MERITO VALUES
('sanfra1976', '012009', 'GRP0126', 0.6, 0, 0)
, ('sanfra1976', '022009', 'GRP0135', 0.45, 0, 0)
, ('sanfra1976', '092008', 'GRP0016', 0.06, 0, 0);
INSERT dbo.UT_MERITO VALUES
('PIPPO', '012009', 'GRP0126')
, ('PIPPO', '022009', 'GRP0135')
, ('PIPPO', '092008', 'GRP0016');
SELECT SV.SV, SV.Mese, SUM(GM.ASSENTEISMO) / COUNT(*) AS Assenteismo
FROM dbo.SV_MERITO AS SV
JOIN dbo.UT_MERITO AS UT
ON SV.ID_Gruppo = UT.ID_GRUPPO
AND SV.Mese = UT.Mese
JOIN dbo.GIORN_MESE AS GM
ON UT.OP = GM.CF_OP
AND UT.Mese = GM.MESE
GROUP BY SV.SV, SV.Mese;
/* Output:
SV Mese Assenteismo
---------------- ------- ------------
sanfra1976 012009 0.273000
sanfra1976 022009 0.500000
sanfra1976 092008 0.040000
(3 row(s) affected)
*/
DROP TABLE dbo.GIORN_MESE, dbo.SV_MERITO, dbo.UT_MERITO;
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org