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
Post a Comment