1

パラメータに基づいて条件付き結合を行うことは可能ですか。例えば:

//PSEUDE CODE:
DECLARE @condition bit
SET @condition=1 or 0 

SELECT * 
FROM tableA 
INNER JOIN tableB on tableA.SomeColumn = tableB.SomeColumn 
if @condition = 0 THEN 
   INNER JOIN tableC ON tableC.SomeCOlumn = TableA.SomeColumn 
ELSE
   INNER JOIN tableD ON tableD.SomeColumn=TableA.someColumn

ありがとうございました

4

3 に答える 3

2

説明

クエリを含むvarcharを作成し、execそれらを実行するために使用できます。

Transact-SQLバッチ、または次のモジュールのいずれかでコマンド文字列または文字列を実行します:システムストアドプロシージャ、ユーザー定義ストアドプロシージャ、CLRストアドプロシージャ、スカラー値のユーザー定義関数、または拡張ストアドプロシージャ。

サンプル

DECLARE @SQL varchar(max)
DECLARE @condition bit
SET @condition=1 

SET @SQL = 'SELECT * FROM tableA INNER JOIN tableB on tableA.SomeColumn=tableB.SomeColumn'

IF (@condition = 1) 
BEGIN 
    SET @SQL = @SQL + ' INNER JOIN tableC ON tableC.SomeCOlumn=TableA.SomeColumn'
END ELSE BEGIN
    SET @SQL = @SQL + ' INNER JOIN tableD ON tableD.SomeColumn=TableA.someColumn'
    END

exec(@SQL)

詳しくは

于 2012-07-18T08:18:59.647 に答える
0

あなたは動的クエリでそれを行うことができます

declare @sql_str varchar(500)
if @contidion=0
@sql_str='INNER JOIN tableC ON tableC.SomeCOlumn=TableA.SomeColumn'
else
@sql_str='INNER JOIN tableD ON tableD.SomeColumn=TableA.someColumn'

exec('SELECT * FROM tableA INNER JOIN tableB on 
 tableA.SomeColumn=tableB.SomeColumn' +@sql_str)
于 2012-07-18T08:17:35.410 に答える
0

可能です、こちらをご覧ください

しかし、このような状況では、条件が事前に定義されていて多すぎない場合は、複数の if ステートメントを使用したいと思います。これは、読み取りと保守がはるかに簡単です。

If (condition1)
 Select * From tblA
Else If (condition2)
 Select * From tblA Inner Join tblB ...
Else If (condition3)
 .....
于 2012-07-18T08:21:34.637 に答える