2017-06-07 17 views
0

同じテーブルとフィルタを共有するsimalary(しかし同じではない)レポートがあります。無差別のストアドプロシージャを書く代わりに、私は1つを作成し、フィルタを伴うパラメータでSELECTデータセットを切り替えたいと思います。SELECT文でIFをフィルタとして使用する方法

私のようなものを試してみた:

IF @UseDataGroup = 1 --from ssrs 
    BEGIN 
    SELECT 
     IF transaction_type IN (10, 27) 
     ..... 
    END 
IF @UseDataGroup = 2 
    BEGIN 
    SELECT 
     IF transaction_type IN (11) 
     ..... 
    END 

    FROM 

    WHERE 

..withは、残念ながら任意の助けがaprreciatedされるだろう エラー「マルチパート識別子TRANSACTION_TYPEをバインドできませんでした」を返します。ありがとう。

+0

このエラーはかなり明確です。 'transaction_タイプ 'は認識されません。さらに、 'SELECT IF'は有効な構文ではありません。 –

+0

'WHERE'節で' transaction_type'にパラメータとフィルタを使うことができます。 – NickyvV

+0

回避策を教えてください。 –

答えて

1

あなたのSELECT声明

SELECT YourFields 
FROM YourTable 
WHERE (@UseDataGroup = 1 AND transaction_type IN (10, 27)) 
    OR (@UseDataGroup = 2 AND transaction_type = 11) 
    --add additional filters as needed 
1

サンプルCASE文でWHERE句でtransaction_type上のSSRSからの着信フィルタとフィルタを使用することができます

DECLARE @UseDataGroup INT 
DECLARE @transaction_type INT 

SET @UseDataGroup = 1 
SET @transaction_type = 10 

IF @UseDataGroup = 1 --from ssrs 
    BEGIN 
    SELECT 
     CASE WHEN @transaction_type IN (10, 27) 
     THEN 'Success' 
     END 
    END 

OR

SELECT 
    CASE WHEN @transaction_type IN (10, 27) AND @UseDataGroup = 1 
    THEN 'Success' 
    END 
+0

FYI: 'CASE'は式です。 – NickyvV

関連する問題