2011-12-15 22 views
2

ストアドプロシージャに渡すパラメータに基づいてテーブルを結合することを変更したいと思います。渡すパラメータに基づいて、結合が行われます。SQL Serverで条件付きのJOIN

どうすれば実現できますか?

+2

JOINとはどのように違うのですか?別のテーブルまたは(1つ以上の)異なるフィールドに参加しますか? – deroby

答えて

5

あなたの条件に基づいて別の列に参加したい場合は、これを試して、この

SELECT * 
FROM tblA A 
JOIN tblB B 
ON A.col1 = 
    CASE WHEN <any condition> THEN B.col1   
    END 
0

を使用しています。私は入力パラメータに基づいて異なるテーブルから値を選択する必要があると思います。

DECLARE @tmpTable1 TABLE(ID INT,Name VARCHAR(5)) 
DECLARE @tmpTable2 TABLE(ID INT,Value INT) 
DECLARE @tmpTable3 TABLE(ID INT,Value INT) 

DECLARE @vchTableType VARCHAR(5) = '2' 
-- Possible values 2 fro table2 and 3 for table 3 

INSERT INTO @tmpTable1 VALUES 
(1,'A'), 
(2,'B'), 
(3,'C'), 
(4,'D'); 

INSERT INTO @tmpTable2 VALUES 
(1,100), 
(2,200), 
(3,300), 
(4,400); 

INSERT INTO @tmpTable3 VALUES 
(1,10), 
(2,20), 
(3,30), 
(4,40); 

SELECT 
        T1.ID 
        ,T1.ID 
        ,CASE @vchTableType WHEN '2' THEN T2.Value WHEN '3' THEN T3.Value ELSE -1 END Column1 
FROM    @tmpTable1 T1 

LEFT OUTER JOIN  @tmpTable2 T2 
ON     T1.ID = T2.ID 

LEFT OUTER JOIN  @tmpTable3 T3 
ON     T1.ID = T3.ID