• 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;