a4apple (4/12/2014)
I was thinking if there is any better approach than using the cross Join.
Don't know if this is better, at least it is slightly different 😎
DECLARE @Emp TABLE (Empid INT,EmpName VARCHAR(10)) ;
DECLARE @Proj TABLE (ProjID INT,ProjName VARCHAR(10)) ;
DECLARE @EmpProj TABLE (EmpID INT,ProjID INT) ;
INSERT INTO @Emp VALUES(1, 'Tony'), (2,'Romo') ;
INSERT INTO @Proj VALUES(1, 'Project 1'), (2, 'Project 2') ;
INSERT INTO @EmpProj VALUES(1, 1),(2, 1), (2, 2) ;
;WITH PROD_COUNT(PCNT) AS
(SELECT COUNT(*) AS PCNT FROM @Proj)
SELECT
X.Empid
,X.EmpName
FROM
(
SELECT
E.Empid
,E.EmpName
,ROW_NUMBER() OVER
(
PARTITION BY E.Empid
ORDER BY (SELECT NULL)
) AS EMP_RID
FROM @EmpProj P
INNER JOIN @Emp E
ON P.EmpID = E.Empid
) AS X
INNER JOIN PROD_COUNT PC ON X.EMP_RID = PC.PCNT;