2016-11-22 3 views
0

ブール値フィールドである "cancelled"というフィールドを含むデータセットがあります。レポートに@includecancelledというパラメータをブール値として設定します。ユーザーは、キャンセルしたレコードをレポートに含めるかどうかを制御するために、TrueまたはFalseとマークすることができます。これまで私はそれを行う方法を見つけることができませんでした。これは私が現在持っているものの基本的なアウトラインです:SSRS - 特定のレコードを含む/除外するパラメータ

SELECT TOP 10 COUNT (table1.field1) as Count_field1 
    ,table2.fielda 
    ,table2.fieldb 
FROM 
    table1 
    INNER JOIN table2 
    ON table1.field1 = table2.fieldc 
WHERE 
    table1.field2 in (@param1) 
GROUP BY 
    table2.fielda 
    ,table2.fieldb 
ORDER BY COUNT (table1.field1) DESC 

私は「キャンセル」フィールドと、ユーザが選択したパラメータに基づいてレコードを除外または含めるためのWHERE句で別のステートメントを持っているしたいと思います。だから、このようなもの:

SELECT TOP 10 COUNT (table1.field1) as Count_field1 
    ,table2.fielda 
    ,table2.fieldb 
FROM 
    table1 
    INNER JOIN table2 
    ON table1.field1 = table2.fieldc 
WHERE 
    table1.field2 in (@param1) 
    IF (@includecancelled = TRUE, '', ',AND table1.cancelled = FALSE') 
GROUP BY 
    table2.fielda 
    ,table2.fieldb 
ORDER BY COUNT (table1.field1) DESC 

明らかにうまくいかないが、私が望んでいるものの一般的な考えです。

答えて

2

CASE文を使用してください。 ターゲット上

SELECT TOP 10 COUNT (table1.field1) as Count_field1 
    ,table2.fielda 
    ,table2.fieldb 
FROM 
    table1 
    INNER JOIN table2 
    ON table1.field1 = table2.fieldc 
WHERE 
    table1.field2 in (@param1) 
    AND table1.cancelled = CASE WHEN @includecancelled = 1 THEN table1.cancelled ELSE 'FALSE' END 
GROUP BY 
    table2.fielda 
    ,table2.fieldb 
ORDER BY COUNT (table1.field1) DESC 
+0

(upvoted)権利を更新しました。 –

+0

これはほとんど存在しますが、1つの問題です。 「includecancelled」をtrueとマークすると、キャンセルされた値だけでなく、すべての値が返されます。あなたのCASEのFALSE部分にはスポットがあります。しかし、TRUE部分はキャンセルされた値のみを返します。 – MSCF

+0

上記の更新。 'TRUE'の代わりに、table1.cancelledを自分自身に設定します。 –

1
SELECT TOP 10 COUNT (table1.field1) as Count_field1 
    ,table2.fielda 
    ,table2.fieldb 
FROM table1 
    INNER JOIN table2 
    ON table1.field1 = table2.fieldc 
WHERE 
    table1.field2 in (@param1) 
    and (( @includecancelled = TRUE ) 
    OR (@includecancelled = FALSE AND table1.cancelled = FALSE)) 
GROUP BY table2.fielda,table2.fieldb 
ORDER BY COUNT (table1.field1) DESC