繁体   English   中英

SQL 将两个表中的两个条件合并为一个

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM