2017-04-26 10 views
0

SQL Serverに2つのテーブル、Table1およびTable2があります。どちらの表にも、ほとんど両方の表に一致する列EmployeeNameがあります。SQL Serverで2つのテーブルを比較して、一致する従業員に値を追加する方法

これは、表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 1従業員が一致している今、両方のテーブルをし、 Table 2。最後にEmployeenameはテーブルErmatchとロスの両方が両方のテーブルを結合する方法を表1に加わると一致している。この

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 

のような1つの表に参加?両方のテーブルEmployeenameを比較する方法。事前

+1

削除互換性のない 'mysql'タグ – Jens

+0

OKおかげで先生@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それはあなたの要件ですか? –

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 
関連する問題