SQL将两个表从两个条件连接到一个表中

SQL将两个表从两个条件连接到一个表中,sql,sql-server,Sql,Sql Server,在VisualStudio中,我有两个SQL表达式,但我想将它们组合成一个,以便在同一个表中轻松分析结果。现在,我有两个并排的表,并手动比较数据 表达式1将测试员工是否列出了活动:表中将显示活动的员工 雇员 员工1 雇员2 雇员3 雇员4 雇员5 雇员6 我认为您需要首先查询Employee表以获取所有活动的Employee,然后在bi和bo表上执行左联接。比如说: SELECT ag.name, bi.job as 'Operation', bi.data

在VisualStudio中,我有两个SQL表达式,但我想将它们组合成一个,以便在同一个表中轻松分析结果。现在,我有两个并排的表,并手动比较数据

表达式1将测试员工是否列出了活动:表中将显示活动的员工

雇员 员工1 雇员2 雇员3 雇员4 雇员5 雇员6
我认为您需要首先查询Employee表以获取所有活动的Employee,然后在bi和bo表上执行左联接。比如说:

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),然后对于所有活动员工,您将显示他们的工作任务、时间和客户名称。左联接有助于从左表中提取所有记录(即从表AG中提取所有活动员工记录),如果联接列中存在匹配项,则从其他两个表中提取匹配记录

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

他说他还想显示不活跃的员工,因此
ag.active=1
条件应该从
WHERE
移动到
bi
表左侧连接部分的
,是的,我不确定他所说的是什么-“列出所有满足表达式1条件的员工,然后…”。如果他只希望整个列表中的active=1,那么他应该保持这种方式。如果不把它移到ON。是的,这很混乱,但是如果最后一个表是他想要的输出,那么我说的应该做。我很抱歉没有解释清楚。一方面,我试图解释一切,但我也试图不创造一个很长的文本,它可能不清楚。我所说的“列出所有满足表达式1条件的员工,然后”是指所有人都希望列出所有活动的员工,在本例中,这是第一个表。我将尝试该代码。