2017-09-12 9 views
2

クライアントデータを持つテーブルがあり、2つの参照テーブルを結合して必要なテキスト値を取得する必要があります。だから誰かが何らかの形で参照テーブルのすべてのデータを含んでいないので、データの中には別のテーブルから値を取得する必要があるものがあります。そう2つの参照テーブルを結合して適切な値を取得する

、問題は、> 1000でのみ値が企業と参照テーブルに格納されている、1200

-

分かるように、データ

ID   ClientID   CompanyID 
1   199     80 
2   187     91 
3   85     1001 
4   83     1145 

会社IDを持つ最初の表は、80から変化します

tblCompanies 

CompanyID   CompanyName 
1001    Microsoft 
1002    Apple 
1145    HP 

会社名の残りは別のテーブルに格納されている

tblReference 

ID  FldName  Label 
80  Company  Adobe 
81  Company  Amazon 
91  Company  Pixel 

tblReferenceは、多くの他のデータを持っていますが、ほとんどの部分は、それが唯一の80からIDを参照 - 90、および他のすべての企業ID年代はtblCompaniesからです....

どのように私は、この2つのテーブルを結合することができるだろうか?重複レコードを取得することなく私はUNIONとUNIOAN ALLを試みたが、それは

答えて

5

まず組合あなたtblcompaniestblReferencesテーブル一緒にうまくいかなかった場合、加入:

SELECT t1.id, t1.clientid, t1.CompanyID, t2.CompanyName 
FROM firstTable as t1 
    INNER JOIN 
     (
      SELECT companyID, companyName FROM tblCompanies 
      UNION ALL 
      SELECT id, label FROM tblReference WHERE fldname = 'Company' 
     ) t2 ON t1.CompanyID = t2.CompanyId 
+0

ありがとうございました........................ – BobSki

1

はなぜちょうどので、それらの両方に参加していない、あなたの例によると、 CompanyIDは両方のテーブルに存在しませんか?また、UNION ALLは重複を保持しますが、UNIONは重複しません。

select 
    d.id 
    ,d.ClientID 
    ,d.CompanyID 
    ,Company = coalesce(c.CompanyName,r.Label) 
from  
    Data d 
    left join 
     tblCompanies c on 
     c.CompanyID = d.CompanyID 
    left join 
     tblReference r on 
     r.id = t.CompanyID 
     and r.FldName = 'Company' 
where 
    coalesce(c.CompanyName,r.Label) is not null --optional 
+0

ありがとうございます! – BobSki

+0

心配しないで@BobSki、私は間違いなく、それが遅くなる他の答えのような組合やcteの必要性を見ていない:) – scsimon

+1

これは簡単です質問を掲示する前に組合でそれをしようとしていたが、適切なデータが得られていませんでした。 – BobSki

関連する問題