SQL如何连接具有不同列和连接的两个查询

时间:2018-07-10 09:56:53

标签: sql sql-server sql-server-2005

我有2个查询都使用联接,请从多个表中选择各种列,这些表会产生以下结果集:

companyID   workType    contractnumber  employeenumber  Value2
1           1C          9999999         111111          2547.21
1           1C          9999999         222222          863.67
1           1C          9999999         333333          2962.15
1           1C          9999999         444444          1971.61
1           1C          9999999         555555          152.41
1           1C          9999999         666666          155.90
1           1C          9999999         777777          657.20


companyID   normalWorkType  employeeNumber  value1
1           1C              11111           1016.08
1           1C              22222           3118.05
1           1C              33333           2628.81
1           61              44444           2547.21

我希望将它们结合起来以产生以下结果。任何人都可以解释正确的语法吗?

companyID   normalWorkType  contractnumber  employeeNumber  value1  Value2
1           1C              9999999         11111           1016.08 2547.21
1           1C              9999999         22222           3118.05 863.67
1           1C              9999999         33333           2628.81 2962.15
1           61              9999999         44444           2547.21 1971.61
1           1C              9999999         55555           0       152.41
1           1C              9999999         66666           0       155.90
1           1C              9999999         77777           0       657.20

上面的分组是在companyID和employeeNumber上

6 个答案:

答案 0 :(得分:2)

尝试左外加入:

SELECT t1.companyID,
       t2.normalWorkType,
       t1.contractnumber,
       t1.employeeNumber,
       coalesce(t2.value1,0) as t2.value1,
       t1.value2
FROM DatabaseName.t1 AS t1 LEFT OUTER JOIN
     DatabaseName.t2 AS t2 ON t1.employeenumber = t2.employeenumber  
       AND t1.companyID = t2.companyID

答案 1 :(得分:1)

我在这里假设提议的结果集中的合同编号实际上是您第一个查询中的合同编号,而区别只是一个错字。如果是这样,那么您会得到想要的东西。

SELECT
  q1.companyID   
  COALESCE(q2.normalWorkType,q1.workType) AS normalWorkType
  q1.contractnumber  
  q1.employeeNumber  
  COALESCE(q2.value1  ,0) as value1
  q1.Value2
FROM
  (
    <Your first query>
  ) as q1
LEFT JOIN
  (
    <Your second query>
  ) as q2
    ON
      q1.companyID = q2.companyID
      AND
      q1.employeeNumber = q2.employeeNumber;

答案 2 :(得分:0)

请尝试以下查询

select Table1.companyId,Table2.normalworktype,Table1.contractnumber,
Table1.employeenumber,Table2.value1,Table1.value2 
from Table1 
inner join Table2 on Table1.companyid = Table2.companyid 
      and Table1.employeeNumber=Table2.employeeNumber

答案 3 :(得分:0)

感谢大家的答复,

尝试了Husam Ebish的建议后,这不是我所需要的,但是将我引向了这个话题。 (投票赞成)

How to combine two query results into one and I have different column name

我真正发现的有用的是下面从链接线程中突出显示的这些信息。在尝试了不同的“左”联接后,建议注释的突出显示使我尝试“完全外部联接”,这给了我正确的结果集。

  

如果每个查询中只有一行,那只是CROSS JOIN

SELECT
  *
FROM
  (query1)   AS q1
CROSS JOIN
  (query2)   AS q2
  

如果每个查询有多个行,则需要一个INNER JOIN   或者也许是FULL OUTER JOIN以及两组之间的某些关系   数据

SELECT
  *
FROM
  (query1)   AS q1
FULL OUTER JOIN
  (query2)   AS q2
      ON  q2.id2 = q1.id1

注意:

  • UNION垂直追加数据
  • JOIN水平附加数据

答案 4 :(得分:0)

SELECT
  *
FROM
  (select top 1  VL1,VL2,VL3 from current_voltage AS q1
where deviceimei ='233'
order by devicetimestamp)   AS q1
CROSS JOIN
  (select top 1  OTI,WTI,ATI from overview  AS q2
where deviceimei ='233'
order by devicetimestamp  )   AS q2

答案 5 :(得分:-2)

您可以将搜索结果放入2临时表,然后加入该2临时表,或对每个选择使用Alliance,然后将其加入。 就像:

SELECT 
  *
FROM (
  SELECT 
     companyID
    ,workType
    ,contractnumber
    ,employeenumber
    ,Value2
  FROM table1
  ) t1
INNER JOIN (
  SELECT 
     companyID
    ,normalWorkType
    ,contractnumber
    ,employeeNumber
    ,value1
    ,Value2
  FROM table2
  ) t2 
    ON t1.companyID = t2.companyid

或将结果放入2个不同的临时表,然后将它们加入

SELECT 
   companyID
  ,workType
  ,contractnumber
  ,employeenumber
  ,Value2
INTO #tt1
FROM table1

SELECT 
   companyID
  ,normalWorkType
  ,contractnumber
  ,employeeNumber
  ,value1
  ,Value2
INTO #tt2
FROM table2

SELECT *
FROM #tt1 t1
INNER JOIN #tt2 t2 ON t1.companyid = t2.companyID