2011-03-10 2 views
0

カスタマーリストを参照する5つのフィールドがあるテーブルがあります。フィールド(c1、c2など)は、他のテーブルの顧客のIDです。顧客名をオンラインのレポートと5つのエンティティで解決するSQL文が必要です。例:複数のルックアップを使用したSQLクエリ

Table1 
ID Description C1 C2 C3 
1 PartyGroup  2 3 1 
2 BeerFolk  1 0 2 

Customer table 
ID Name 
1 Rob 
2 Joe 
3 Fred 


Output: 
ID Description Cust1 Cust2 Cust3 
1 PartyGroup Joe Fred Rob 
2 BeerFolk  Rob   Joe 

任意の考えをいただければ幸いです...あなたがからの句で顧客テーブルを参照する乗算する必要があります

答えて

0

- その後、正常にリンクする - 別名それらをC3などC1、C2、と。これに似た

select t.id, t.description, c1.name "Cust1", c2.name "Cust2", c3.name "Cuat3" 
from table1 t, customer c1, customer c2, customer c3 
where t.c1 = c1.id 
and t.c2 = c2.id 
and t.c3 = c3.id 
2
SELECT t1.ID, t1.Description, c1.Name AS Cust1, c2.Name AS Cust2, c3.Name AS Cust3 
    FROM Table1 t1 
     LEFT JOIN Customer c1 
      ON t1.C1 = c1.ID 
     LEFT JOIN Customer c2 
      ON t1.C2 = c2.ID 
     LEFT JOIN Customer c3 
      ON t1.C3 = c3.ID 
+0

私は名前だけのために "NULL" の値を防ぐために、修正しますc1、c2、およびc3フィールドにはそれぞれエントリがありません。 – DRapp

+0

@DRapp:十分に公正です。提案通りに変更されました。 –

0

別のアプローチは、UNIONまたはUNION ALLを使用してテーブルを正規化するために、次のようになります。

TRANSFORM First(Customer.Name) AS FirstOfName 
SELECT Norm.ID, Norm.Description 
FROM Customer 
INNER JOIN (
    SELECT ID, Description, "C1" As Cust, C1 As CID 
    FROM table1 
    UNION 
    SELECT ID, Description, "C2" As Cust, C2 As CID 
    FROM table1 
    UNION 
    SELECT ID, Description, "C3" As Cust, C3 As CID 
    FROM table1) AS Norm 
ON Customer.ID = Norm.CID 
GROUP BY Norm.ID, Norm.Description 
PIVOT Norm.Cust 
関連する問題