2016-07-15 11 views
0

私はMSSQLに2つのテーブルを持っています。 Table2には、( '1,2,3')のようなTcode(varchar)、('45、2,35 'のような)CCode(varchar)、visitdate(datetime)のような列があります。訪問者は両方で共通です。'and' in where条件SQL Server

表1には、varchar commaseperatedコードがあります。

表2は、Int/SmallIntとして列タイプを持っています。 table1から、私は必要な変数を宣言しました。私は論理演算子を印刷する必要があり@condition変数に基づいて、ここで

declare @condition varchar(10)-- returns ('1,2,3') 
declare @cdatetime datetime 
declare @Ccodes varchar(500) 
declare @Tcodes varchar(500)-- returns ('1,2,3') 
---------------------------------------------- 
Here @condition returns 'And' or 'Or' strings 
-------------------------------------------------- 
Table1: 
select @cdatetime=Startdatetime,@Ccodes= Ccode, @condition=condition,@Tcodes=Tcode 
from Table1 

Table2: 
select sum(rate) from table2 where visitdate>[email protected] 
and Tcode in (@TCodes) 'PRINT @condition' Ccode in (@Ccodes)) 

はここでスクリプトです。

SQLでキーワードを印刷する方法はありますか?Visual Studio BI統合サービス(T-SQLクエリウィンドウ)を使用しています。

ありがとうございました。あなたは、文字列を作成して呼び出すために、動的SQLを使用することができ

答えて

2

次のいずれか

EXECUTE sp_executesql

それともラインでパラメータを評価する:単に

SELECT SUM(rate) 
FROM table2 
WHERE visitdate >= @cdatetime 
     AND ((Tcode IN (@TCodes) 
       AND @condition = 'AND' 
       AND Ccode IN (@Ccodes) 
      ) 
       OR ((Tcode IN (@TCodes) 
        AND @condition = 'OR' 
        OR Ccode IN (@Ccodes) 
        ) 
       ) 
      ) 

これは未テストですが、where句ANDORの各オプションを処理する条件があります。

+0

一度に必要な条件は1つだけです。クエリの値は、「AND」と「OR」を使用すると変更されます。両方の状態を確認することはパフォーマンス上の問題です。その巨大なテーブル。 –

+0

@InayathullahKhan SQLサーバーは、クエリを実行する前に条件を評価し、有効なwhere句の部分のみを使用します。したがって、 '@condition = 'AND''が見え、WHERE句のその部分を使用して、相手側がFALSEと評価されることがわかります。私の意見ではパフォーマンスに影響しないはずですが、テストするのが最善です。 – Tanner