>se ora volessi ottenere le stesse informazioni ma solo per gli
>impiegati che si chiamano per esempio Giiovanni e Marco come
>fare?
Ciao Bule,
io adotterei una soluzione simile a questa:
USE tempdb;
GO
CREATE TABLE dbo.DettagliImpiegato
(
IDimpiegato int NOT NULL PRIMARY KEY,
Nome varchar(10) NOT NULL
);
CREATE TABLE dbo.Info
(
IDRiga int NOT NULL PRIMARY KEY,
IDimpiegato int NOT NULL,
Dati varchar(20) NOT NULL,
CONSTRAINT FK_Info_DettagliImpiegato FOREIGN KEY(IDimpiegato)
REFERENCES dbo.DettagliImpiegato(IDimpiegato)
);
GO
INSERT dbo.DettagliImpiegato VALUES(1, 'Lorenzo');
INSERT dbo.DettagliImpiegato VALUES(2, 'Andrea');
INSERT dbo.DettagliImpiegato VALUES(3, 'Marcello');
INSERT dbo.DettagliImpiegato VALUES(4, 'Giovanni');
INSERT dbo.DettagliImpiegato VALUES(5, 'Marco');
INSERT dbo.Info VALUES(1, 1, 'Dato Lorenzo 1');
INSERT dbo.Info VALUES(2, 1, 'Dato Lorenzo 2');
INSERT dbo.Info VALUES(3, 4, 'Dato Giovanni 1');
INSERT dbo.Info VALUES(4, 4, 'Dato Giovanni 2');
INSERT dbo.Info VALUES(5, 4, 'Dato Giovanni 3');
INSERT dbo.Info VALUES(6, 3, 'Dato Marcello 1');
INSERT dbo.Info VALUES(7, 5, 'Dato Marco 1');
INSERT dbo.Info VALUES(8, 5, 'Dato Marco 2');
GO
WITH CTE_MaxRiga AS
(
SELECT IDimpiegato, MAX(IDRiga) AS IDRiga
FROM dbo.Info
GROUP BY IDimpiegato
)
SELECT DI.Nome, I.Dati
FROM dbo.DettagliImpiegato AS DI
JOIN dbo.Info AS I
ON DI.IDimpiegato = I.IDimpiegato
JOIN CTE_MaxRiga AS CTE
ON I.IDimpiegato = CTE.IDimpiegato
AND I.IDRiga = CTE.IDRiga
WHERE DI.Nome IN('Marco', 'Giovanni');
GO
/* Output:
Nome Dati
---------- --------------------
Giovanni Dato Giovanni 3
Marco Dato Marco 2
(2 row(s) affected)
*/
DROP TABLE dbo.Info, dbo.DettagliImpiegato;
Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org