[英]SQL join two tables from two conditions in just one
在 Visual Studio 中,我有两个 SQL 表达式,但我想将它们组合成一个,以便我可以轻松地分析同一张表中的结果。 现在我有两个并排的表并手动比较数据。
表达式 1 将测试列出的员工是否活跃:活跃的将显示在表格中。
员工 |
---|
员工 1 |
员工 2 |
员工 3 |
员工 4 |
员工 5 |
员工 6 |
代码:
where AG.active=1
order by name
表达式 2 将检查员工正在执行的操作及其开始时间。
员工 | 手术 | 时间 | 客户 |
---|---|---|---|
员工 2 | 洗涤 | 2021-04-22 14:00:00 | 客户 1 |
员工 3 | 打扫 | 2021-04-22 14:10:00 | 客户 2 |
员工 4 | 烘干 | 2021-04-22 14:34:00 | 客户 10 |
员工 6 | 交付 | 2021-04-22 15:01:00 | 客户 15 |
代码:
SELECT ag.name, bi.job as 'Operation', bi.data as 'Time', bo.client as 'Client'
FROM bi
INNER JOIN bo
ON bi.aobr = bo.obr
INNER JOIN AG
ON ag.no=bi.no
WHERE (bi.dos = 33 OR bi.dos = 71) AND (YEAR(bi.data2) = 1900) AND (AG.activef=1)
所以我想生成一个表格,其中列出了所有满足表达式 1 条件的员工,然后它会显示,对于正在工作的员工,他们在做什么。 不做任何事情的员工将显示相同的内容,但“操作”和“时间”列为空。 预期结果:
员工 | 手术 | 时间 | 客户 |
---|---|---|---|
员工 1 | |||
员工 2 | 洗涤 | 2021-04-22 14:00:00 | 客户 1 |
员工 3 | 打扫 | 2021-04-22 14:10:00 | 客户 2 |
员工 4 | 烘干 | 2021-04-22 14:34:00 | 客户 10 |
员工 5 | |||
员工 6 | 交付 | 2021-04-22 15:01:00 | 客户 15 |
有了这个,我可以很容易地看到谁是正在工作的员工,哪些是不做任何事情的员工,至少对于在 SQL 数据库中写入信息的软件而言。
有可能做我想做的吗? 我希望我能解释一下我拥有什么以及我想做什么。
我认为您需要首先查询 Employee 表以获取所有活动的员工,然后在 bi 和 bo 表上执行 LEFT JOIN。 所以是这样的:
SELECT ag.name,
bi.job as 'Operation',
bi.data as 'Time',
bo.client as 'Client'
FROM AG
LEFT JOIN bi
ON ag.no=bi.no AND (bi.dos = 33 OR bi.dos = 71) AND (YEAR(bi.data2) = 1900) AND (AG.activef=1)
LEFT JOIN bo
ON bi.aobr = bo.obr
WHERE ag.active = 1
order by ag.name
以下查询应该对您有所帮助。 因此,基本上从 AG 开始,您将带走所有在职员工(ag.active = 1),然后对于所有这些在职员工,您将显示他们的工作任务、时间和客户名称。 LEFT JOIN 有助于从 LEFT 表中提取所有记录(即表 AG 中的所有活动员工记录),如果连接列上存在匹配项,则从其他 2 个表中提取匹配记录。
SELECT AG.name,
bi.job as 'Operation',
bi.data as 'Time',
bo.client as 'Client'
FROM AG
LEFT JOIN bi ON AG.no = bi.no
AND (bi.dos = 33 OR bi.dos = 71)
AND YEAR(bi.data2) = 1900
LEFT JOIN bo ON bi.aobr = bo.obr
WHERE AG.active = 1
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.