List all employee's names and their managers by manager name using an join

DROP TABLE Employees
GO

-- STEP 1 CREATE A TABLE NAME AS Employees WITH THREE FIELDS EmpId,EmpName,MgrId
CREATE TABLE Employees (
    EmpId INT NOT NULL
    ,EmpName VARCHAR(50) DEFAULT NULL
    ,MgrId INT DEFAULT NULL
    ,PRIMARY KEY (EmpId)
    )

-- STEP 2 INSERT INTO VALUES Employees WITH THREE FIELDS EmpId,EmpName,MgrId
INSERT INTO Employees (
    EmpId
    ,EmpName
    ,MgrId
    )
VALUES (
    1
    ,'Manoj'
    ,NULL
    );

INSERT INTO Employees (
    EmpId
    ,EmpName
    ,MgrId
    )
VALUES (
    2
    ,'Yogesh'
    ,1
    );

INSERT INTO Employees (
    EmpId
    ,EmpName
    ,MgrId
    )
VALUES (
    3
    ,'Ajay'
    ,'2'
    );

INSERT INTO Employees (
    EmpId
    ,EmpName
    ,MgrId
    )
VALUES (
    4
    ,'Vijay'
    ,'3'
    );

INSERT INTO Employees (
    EmpId
    ,EmpName
    ,MgrId
    )
VALUES (
    5
    ,'Vinay'
    ,'4'
    );

INSERT INTO Employees (
    EmpId
    ,EmpName
    ,MgrId
    )
VALUES (
    6
    ,'Sanjay'
    ,'5'
    );

INSERT INTO Employees (
    EmpId
    ,EmpName
    ,MgrId
    )
VALUES (
    7
    ,'Suresh'
    ,'1'
    );

INSERT INTO Employees (
    EmpId
    ,EmpName
    ,MgrId
    )
VALUES (
    8
    ,'Mahesh'
    ,'5'
    );

-- QUERY 1 FIND THE EMPLOYEES WHO ARE MANAGERS
SELECT DISTINCT e.EmpId AS 'Manager Id'
    ,e.EmpName AS 'Manager Name'
FROM Employees AS e
    ,Employees AS m
WHERE e.EmpId = m.MgrId

-- QUERY 2 HOW TO GET THE EMPLOYEES WITH THEIR MANAGERS USING LEFT OUTER JOIN
SELECT ISNULL(e.EmpName, '') AS 'Employee Name'
    ,ISNULL(m.EmpName, '') AS 'Manager Name'
FROM employees e
LEFT OUTER JOIN employees m ON e.MgrId = m.EmpId

-- QUERY 3 HOW TO GET THE EMPLOYEES WITH THEIR MANAGERS USING RIGHT OUTER JOIN
SELECT ISNULL(m.EmpName, '') AS 'Employee Name'
    ,ISNULL(e.EmpName, '') AS 'Manager Name'
FROM employees e
RIGHT OUTER JOIN employees m ON m.MgrId = e.EmpId

--QUERY 4 HOW TO GET THE EMPLOYEES WITH THEIR COUNT OF EMPLOYEES
SELECT COUNT(emp.EmpId) AS 'emp count'
    ,mng.[Manager Name] AS 'Manager Name'
FROM employees emp
    ,(
        SELECT DISTINCT e.EmpId AS 'Manager Id'
            ,e.EmpName AS 'Manager Name'
        FROM employees e
            ,employees m
        WHERE e.EmpId = m.MgrId
        ) mng
WHERE emp.MgrId = mng.[Manager Id]
GROUP BY mng.[Manager Id]
    ,mng.[Manager Name]

--QUERY 5 HOW TO GET THE EMPLOYEES WITH THEIR COUNT OF EMPLOYEES HAVING GREATER THAN ONE
SELECT COUNT(emp.EmpId) AS 'emp count'
    ,mng.[Manager Name] AS 'Manager Name'
FROM employees emp
    ,(
        SELECT DISTINCT e.EmpId AS 'Manager Id'
            ,e.EmpName AS 'Manager Name'
        FROM employees e
            ,employees m
        WHERE e.EmpId = m.MgrId
        ) mng
WHERE emp.MgrId = mng.[Manager Id]
GROUP BY mng.[Manager Id]
    ,mng.[Manager Name]
HAVING COUNT(emp.EmpId) > 1;

Comments

Popular posts from this blog

How to Set Default Controller in asp.net MVC 4 & MVC 5 ?

Independency in Object Oriented Programming(OOP’S) languages

Operating System (OS) OR Platform Independency