我有一个名为Employees
的表
ID | 全名 | 员工类型 | 就业率经理ID143 | 萨姆·史密斯道明> | 工资 | 146 |
---|---|---|---|---|
144 | 周杰伦Reddy | 兼职 | 工资 | 146 |
145 | 尼克年轻 | 全职 | 工资 | 146 |
146 | 特雷福Simm | 全职 | 工资 | 147 |
147 | 贾斯汀•彼得斯 | 兼职 | 工资 | 147 |
148 | 丽莎霍华德道明> | 工资 | 140 | |
149 | 尼基西道明> | 工资 | 140 | |
150 | 吉玛余道明> | 工资 | 146 | |
151 | 莎莉张 | 兼职 | 工资 | 140 |
152 | 詹姆斯希拉里 | 全职 | 工资 | 146 |
153 | 尼基塔肖 | 全职 | 工资 | 146 |
如果您使用CTE来确定相关员工,那么您可以在查询上联合以获得他们的经理,例如
WITH cte AS (
SELECT *
FROM Employees
WHERE [Employment Rate] = 'Wage'
)
SELECT * FROM cte
UNION ALL
SELECT * FROM Employees WHERE Id IN (SELECT [Manager ID] FROM cte);
你可以使用像这样的子查询
Select *
From Employees
Where [Employment Rate] = 'Wage'
or ID in (SELECT [Manager ID] FROM Employees Where [Employment Rate] = 'Wage')
您也可以使用UNION语句——我更喜欢它,因为我将在那里添加一个新列,显示数据的来源——以我的经验,当以这种方式处理数据时,您总是希望这样做:
SELECT 'Worker' as SOURCE,
ID, [Full Name], [Employee Type], [Employment Rate], [Manager ID]
FROM Employees
WHERE [Employment Rate] = 'Wage'
UNION ALL
SELECT 'Manager' as SOURCE,
ID, [Full Name], [Employee Type], [Employment Rate], [Manager ID]
FROM Employees
WHERE ID IN (SELECT [Manager ID] FROM Employees Where [Employment Rate] = 'Wage')
注意——如果一个雇员有一个工资率,他们将在这个查询中出现两次,但不会在第一次查询中出现。