我是SQL和stackoverflow的新手,但我希望有人可以帮助我解决以下问题。
公司有三个不同的数据库,每个数据库代表公司内部的不同部门。
每个数据库都包含employee表中的员工信息: id,名字,姓氏,分区。
有三个部门。每个员工可以在一个以上的部门。身份证是员工独有的;多个部门的员工在每个表中都具有相同的ID。
如何编写一个查询来选择每个独特的员工及其工作的部门(一行)?
以下代码的结果不完整,这意味着有一些失踪员工下落不明。
Insert into #temp1 (id, first name, last name, division AS divison1) from db1.table WHERE active_flag = 1 AND termination_date IS NULL
Insert into #temp2 (id, first name, last name, division AS division2) from db2.table WHERE active_flag = 1 AND termination_date IS NULL
Insert into #temp3 (id, first name, last name, division AS division3) from db3.table WHERE active_flag = 1 AND termination_date IS NULL
Insert into #uniqueids (id, first name, last name)
SELECT id, first name, last name FROM #temp1
UNION SELECT id, first name, last name FROM #temp2
UNION SELECT id, first name, last name FROM #temp3
SELECT #uniqueids.id, #uniqueids.first name, #uniqueids.last name,
division1+division2+division3 AS divisions
FROM #uniqueids
LEFT JOIN #temp1 ON #uniqueids.id=#temp1.id
LEFT JOIN #temp2 ON #uniqueids.id=#temp2.id
LEFT JOIN #temp3 ON #uniqueids.id=#temp3.id
WHERE #uniqueids.id NOT LIKE '%default%' AND #uniqueids.id NOT LIKE 'S%'
***我编辑了代码以使其更清晰
我知道某些员工下落不明,因为我获得了一份包含778名独立员工名单的结果集。
示例行:
[id,名字,姓氏,分区]
[asd1234,Julie,Wong,1 2 3]
由于存在包含"默认"并以" S"开头,不计算在内。这些在代码的最后一部分中提到,我刚刚将其包括在内。
我的当前结果集在运行整个查询后拥有770名独特员工,这意味着我错过了8。
我正在使用SQL Server 2014。