>Avete consigli?
Ciao Maurizio,
direi che ci sei quasi, basta solo effettuare un raggruppamento per Codice e Nome prendendo il massimo valore di InCorso:
USE tempdb;
CREATE TABLE dbo.Operatori(
CODICE varchar(9) NOT NULL,
NOME varchar(10) NOT NULL,
CONSTRAINT PK_Operatori PRIMARY KEY(CODICE)
);
CREATE TABLE dbo.Attivita(
IDATTIVITA int IDENTITY(1,1) NOT NULL,
OPERATORE varchar(9) NOT NULL,
INIZIO datetime NOT NULL,
FINE datetime NULL,
TEMPO AS (isnull(round(datediff(second,Inizio,Fine),(0)),(0))) PERSISTED NOT NULL,
CONSTRAINT PK_Attivita PRIMARY KEY(IDATTIVITA),
CONSTRAINT FK_Attivita_Operatori FOREIGN KEY(Operatore)
REFERENCES dbo.Operatori(Codice)
);
INSERT dbo.Operatori VALUES ('002.00001', 'Alfa');
INSERT dbo.Operatori VALUES ('002.00002', 'Beta');
INSERT dbo.Operatori VALUES ('002.00003', 'Gamma');
INSERT dbo.Attivita VALUES ('002.00001', '20090105 08:00:00', '20090105 10:00:00');
INSERT dbo.Attivita VALUES ('002.00001', '20090106 08:00:00', NULL);
INSERT dbo.Attivita VALUES ('002.00002', '20090105 09:00:00', '20090105 10:30:00');
WITH CTE_Attività(Codice, Nome, InCorso)
AS
(
SELECT
op.CODICE
, op.NOME
, CASE Tempo
WHEN 0 THEN 1
ELSE 0
END
FROM dbo.Operatori AS op
LEFT JOIN dbo.Attivita AS at
ON op.CODICE = at.OPERATORE
)
SELECT
Codice
, Nome
, MAX(InCorso) AS InCorso
FROM CTE_Attività
GROUP BY
Codice
, Nome;
/* Output:
Codice Nome InCorso
--------- ---------- -----------
002.00001 Alfa 1
002.00002 Beta 0
002.00003 Gamma 0
(3 row(s) affected)
*/
DROP TABLE dbo.Attivita, dbo.Operatori;
>Grazie mille
Prego.
Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org