Hallo Alexander,
das kann man sehr schön mit CTE lösen. Hier mal ein "Schuss aus der Hüfte"
DECLARE @k TABLE
(
Id int NOT NULL IDENTITY PRIMARY KEY CLUSTERED,
CustomerName varchar(40) NOT NULL
);
DECLARE @a TABLE
(
EmployeeId int NOT NULL IDENTITY PRIMARY KEY CLUSTERED,
CustomerId int NOT NULL,
Employee varchar(40) NOT NULL,
GroupId int NOT NULL DEFAULT (0)
);
-- Ein paar Companies
INSERT INTO @k
VALUES
('Company1'),
('Company2'),
('Company3')
-- Ein paar Mitarbeiter
INSERT INTO @a
VALUES
(1, 'Uwe Ricken', 1),
(1, 'Uwe Ricken', 2),
(1, 'Uwe Ricken', 3),
(2, 'Beate Meyer', 1),
(2, 'Beat Müller', 1),
(2, 'Klaus Meier', 2),
(3, 'Michael Müller', 1),
(3, 'Donald Duck', 3)
;WITH cte
AS
(
SELECT ROW_NUMBER() OVER (PARTITION BY CustomerId ORDER BY GroupId) AS RowNo,
a.CustomerId
FROM @a a
)
SELECT --DISTINCT
k.*
FROM @k k INNER JOIN cte c
ON (k.Id = c.CustomerId)
WHERE c.RowNo > 2
Mehr Informationen zu CTE und ROW_NUMBER findest Du hier:
CTE:
http://msdn.microsoft.com/de-de/library/ms190766(v=sql.105).as
RowNumber:http://msdn.microsoft.com/de-de/library/ms186734.aspx
Uwe Ricken
MCITP Database Administrator 2005
MCITP Database Administrator 2008
MCITP Microsoft SQL Server 2008, Database Development
db Berater GmbH
http://www-db-berater.de
SQL Server Blog (german only)