2014-08-27 68 views
0

我有两个表如下所示,需要连接两个表并需要获取结果表。SQL Server内部连接where子句中两列的总和

任何人都可以帮助我吗?

New_Table    
Emp CodeEmp Name BF OOF TB 
11111 AAAA  Y Off 1 
22222 BBBB  Y Off 0.75 
22222 BBBB  Y Off 0.25 
33333 CCCC  Y On 0.98 
44444 DDDD  Y Off 1 
55555 EEEE  Y Off 1 

Old_Table    
Emp Code Emp Name  BF OOF TB 
11111  AAAA   Y Off 1 
22222  BBBB   Y Off 0.25 
22222  BBBB   Y Off 0.75 
33333  CCCC   Y Off 0.98 



Result    
Emp Code Emp Name BF OOF TB 
44444  DDDD  Y Off 1 
55555  EEEE  Y Off 1 

我曾尝试下面的SQL查询购买我收到的Emp代码222222,我不需要,因为TB的有关EMP代码222222之和等于1,即= 1

INSERT INTO Result ([Emp Code] 
     ,[Emp Name] 
     ,[BF] 
     ,[OOF] 
     ,[TB]) 
SELECT a.[Emp Code] 
     ,a.[Emp Name] 
     ,a.[BF] 
     ,a.[OOF] 
     ,a.[TB] 
FROM New_Table a left join Old_Table b 
on a.[Emp Code] = b.[Emp Code] where 
a.[BF] = 'Y' and a.[OOF] = b.[OOF] and a.[TB] > b.[TB] 
and a.[TB] > 0.5 ; 
+2

你只是在查找New_Table中的记录,但不是在Old_Table中? – 2014-08-27 17:54:01

+0

@Dave.Gugg的好处。你说你想加入表格,但只能从其中一个获得值。 – 2014-08-27 18:03:36

回答

0

使用SUM,GROUP BY和HAVING子句。

INSERT INTO Result ([Emp Code] 
     ,[Emp Name] 
     ,[BF] 
     ,[OOF] 
     ,[TB]) 
SELECT a.[Emp Code] 
     ,a.[Emp Name] 
     ,a.[BF] 
     ,a.[OOF] 
     ,sum(a.[TB]) 
FROM New_Table a left join Old_Table b 
on a.[Emp Code] = b.[Emp Code] where 
a.[BF] = 'Y' and a.[OOF] = b.[OOF] 
and a.[TB] > 0.5 
group by 
    a.[Emp Code] 
     ,a.[Emp Name] 
     ,a.[BF] 
     ,a.[OOF] 
having sum(a.[TB]) > sum(b.[TB]) 
0

试试这个:

AND (a.TB + COALESCE(B.TB, 0)) != 1 

这将消除22222为您服务。

或者,您可以尝试子查询。

and a.[Emp Code] not in (select [Emp Code] from New_Table group by [Emp Code] 
having sum(TB) = 1) 

您可以将任何where子句限制添加到您需要的子查询中。

0

使用EXCEPT运算符查找新记录。 我只修改了你的查询。你可以尝试下面的代码:

INSERT INTO Result ([Emp Code] 
      ,[Emp Name] 
      ,[BF] 
      ,[OOF] 
      ,[TB]) 
    SELECT a.[Emp Code] 
      ,a.[Emp Name] 
      ,a.[BF] 
      ,a.[OOF] 
      ,a.[TB] 
    FROM New_Table a left join Old_Table b 
    on a.[Emp Code] = b.[Emp Code] where 
    a.[BF] = 'Y' and a.[OOF] = b.[OOF] and a.[TB] > b.[TB] 
    group by a.[Emp Code] 
      ,a.[Emp Name] 
      ,a.[BF] 
      ,a.[OOF] 
      ,a.[TB] 
    having sum(a.tb)>1 
+0

这段代码实际上并不使用'EXCEPT'运算符?!?你试图建议什么解决方案? – AHiggins 2014-08-28 16:52:40