2016-12-08 2 views
0

に2列のデータを取得するために参加し、私は二つのテーブルの下にあります。SQL Server 2008の - いずれかを使用し、表1

表1:

Cparty |Analyse1 |Analyse2 
A  | 1  | 5 
B  | 2  | 6 
C  | 3  | 7 
D  | 4  | 8 

表2:

AnalyseKey | Name 
1   | Apple 
2   | Pear 
3   | Orange 
4   | Banana 
5   | Fresh 
6   | Bad 
7   | Worse 
8   | Awesome 

があります方法を避ける2つの内部結合結果を得るには?

Cparty | Analyse1 | Analyse2 
A  | Apple  | Fresh 
B  | Pear  | Bad 
C  | Orange  | Worse 
D  | Banana  | Awesome 

Myテーブルには、20個の異なるカラム、Analyse1,2.3 ....などがあり、キーの値はすべて同じテーブルにあります。

+0

なぜあなたは内部結合2を持っていないでしょうか? 2つの内部結合を持つ問題は何ですか? –

+1

データが正規化されている場合は、Pivo​​tを使用できます。現在のところ、追加した各分析列に対して結合が必要になると思います。 –

+0

それから、私は20 +内部結合のようにしなければなりません。 – Haggan

答えて

1

必要な列の数に拡大したり、代わりにダイナミックピボットを使用したりすることができます。

SQL DEMO

WITH unpvt as (
    SELECT [Cparty], [Analyse], [AnalyseKey] 
    FROM Table1 
    UNPIVOT 
     ([AnalyseKey] FOR [Analyse] IN 
      (Analyse1, Analyse2) 
    )AS unpvt 
), decode as ( 
    SELECT u.[Cparty], u.[Analyse], t.[Name] 
    FROM unpvt u 
    JOIN Table2 t 
     ON u.[AnalyseKey] = t.[AnalyseKey] 
) 
SELECT [Cparty], [Analyse1], [Analyse2] 
FROM decode 
PIVOT 
(
MAX(Name) 
FOR Analyse IN ([Analyse1], [Analyse2]) 
) AS PivotTable 

OUTPUT

enter image description here