2017-04-26 78 views
0

我在SQL Server中有兩個表,Table1Table2。兩個表都有一列EmployeeName,它應該幾乎匹配兩個表。如何比較SQL Server中的兩個表爲匹配的員工添加值

這是在表1中我的樣本數據:

EmployeeName Expenses Bonus overTime  
----------------------------------------- 
John    198  3734  230 
Ayesa    0  2384  0 
Nimi    400  230  0 
Michael   0  571  0 
Alexander  212  240  0 

表2 Employee Name幾乎具有相同的值 - 這樣的:

EmployeeName  Ermatch  Roth  
----------------------------------- 
John    298   500 
Ayesa    0   450 
Nimi    400   250  
Michael    0   551  

現在兩個表其是僱員匹配兩者Table 1Table 2。最後加入一個表像這樣

EmployeeName Expenses Bonus overTime Ermatch Roth 
---------------------------------------------------------- 
John    198  3734 230   298 500 
Ayesa    0  2384  0   0 450 
Nimi    958  230  0   400 250 
Michael   0  571  0   0 551 
Alexander  212  240  0   0  0 

哪些是Employeename兩個表Ermatch和羅斯加入表1.如何加入兩個表的匹配嗎?如何比較兩個表僱傭。在此先感謝

+1

刪除不兼容'mysql'標籤 – Jens

+0

好,謝謝,先生@Jens – sripriya

+0

嘗試使用不同的?這是參考。 http://stackoverflow.com/questions/17931256/mysql-select-distinct-values-from-two-table-that-have-a-common-key –

回答

1

加入像below.This碼錶都可能是有用的爲您的要求


;WITH Tab1(EmployeeName,Expenses,Bonus,overTime) 
    AS (       
    SELECT 'John'  , 198 , 3734 , 230 union all 
    SELECT 'Ayesa' ,  0 , 2384 , 0 union all 
    SELECT 'NImi'  ,  400 , 230 , 0 union all 
    SELECT 'Michael' ,  0 , 571 ,  0 union all 
    SELECT 'Alexander',  212 , 240 ,  0 
    ) 
    ,tab2(EmployeeName,Ermatch,Roth) 
    AS 
    (      

    SELECT 'John'  ,298  ,500 Union all 
    SELECT 'Ayesa' , 0  ,450 Union all 
    SELECT 'NImi'  , 400 ,250 Union all 
    SELECT 'Michael' , 0  ,551 
    ) 
    SELECT T1.EmployeeName, 
      ISNULL(T1.Expenses,0)Expenses, 
      ISNULL(T1.Bonus,0)Bonus, 
      ISNULL(T1.overTime,0)overTime, 
      ISNULL(T2.Ermatch,0)Ermatch, 
      ISNULL(T2.Roth,0)Roth 
     FROM Tab1 T1 LEFT join tab2 t2 
    ON t2.EmployeeName=T1.EmployeeName 
+0

謝謝@ srini – sripriya

+0

@sripriya是你的要求嗎? – 2017-04-26 09:44:41

1

如果你想同時兩個表中的數據,我想你需要的是FULL JOIN

DECLARE @Table1 as Table (EmployeeName varchar(20), Expenses int, Bonus int ,overTime  int) 

INSERT INTO @Table1 
VALUES 
    ('John',    198,  3734, 230), 
    ('Ayesa',    0,  2384,  0), 
    ('Nimi',    400,  230,  0), 
    ('Michael',   0,  571,  0), 
    ('Alexander',  212,  240,  0) 

DECLARE @Table2 AS TABLE (EmployeeName varchar(20), Ermatch int, Roth int) 
INSERT INTO @Table2 
VALUES 
    ('John',    298,  500), 
    ('Ayesa',    0,  450), 
    ('Nimi',    400,  250),  
    ('Michael',    0,  551), 
    ('NewUser',    0,  551) 

SELECT COALESCE (t.EmployeeName, t2.EmployeeName) AS EmployeeName, 
     ISNULL(t.Expenses,0) AS Expenses, 
     ISNULL(t.Bonus,0) AS Bonus, 
     ISNULL(t.overTime,0) AS overTime, 
     ISNULL(t2.Ermatch,0) AS Ermatch, 
     ISNULL(t2.Roth,0) AS Roth 
FROM @Table1 t 
FULL JOIN @Table2 t2 ON t.EmployeeName = t2.EmployeeName 

演示鏈接:http://rextester.com/VKJT88878

2

也y ou可以像下面那樣以全連接方式連接兩個表。當一個表具有值但另一個表沒有該值時,可以使用它。

;WITH Tab1(EmployeeName,Expenses,Bonus,overTime) 
    AS (       
    SELECT 'John'  , 198 , 3734 , 230 union all 
    SELECT 'Ayesa' ,  0 , 2384 , 0 union all 
    SELECT 'NImi'  ,  400 , 230 , 0 union all 
    SELECT 'Michael' ,  0 , 571 ,  0 union all 
    SELECT 'Alexander',  212 , 240 ,  0 
    ) 
    ,tab2(EmployeeName,Ermatch,Roth) 
    AS 
    (      

    SELECT 'John'  ,298  ,500 Union all 
    SELECT 'Ayesa' , 0  ,450 Union all 
    SELECT 'NImi'  , 400 ,250 Union all 
    SELECT 'Michael' , 0  ,551 union all 
    SELECT 'Alex' , 300  ,500 
    ) 
    SELECT isnull(T1.EmployeeName,T2.EmployeeName) EmployeeName, 
      ISNULL(T1.Expenses,0)Expenses, 
      ISNULL(T1.Bonus,0)Bonus, 
      ISNULL(T1.overTime,0)overTime, 
      ISNULL(T2.Ermatch,0)Ermatch, 
      ISNULL(T2.Roth,0)Roth 
     FROM Tab1 T1 full join tab2 t2 
    ON t2.EmployeeName=T1.EmployeeName