2016-12-02 6 views
0

私の要件は以下のとおりです。ドロップダウンパラメータをスキップして出力を取得できますか?

。リストなし 『の選択だけでなく、のDISTINCTリスト『リスト 『テーブル』 から』リスト名」すべてのレポートにはオプションが含まれている必要があります。LISTオプションを持っている必要があります』以下の例を参照してください。 "no list"がユーザーによって選択された場合、レポートはフルレコードセットを出力する必要があります。フルレコードセットが100万行を超える場合は、フィルタまたはLISTを使用する必要があります。

ここ

LISTは、それがスキップされ、メインクエリからすべての値を与えるようにのみいくつかの特定values.Canたちは何のリストオプションを与えていないparameter.Itがメインtable.Itの完全な値を持っていないです? ?

答えて

1

パラメータに使用可能な値を動的に設定するクエリを記述できます。次に、メインクエリで、 "no list"オプションを確認することができます。

まず、レポートにデータセットを追加します。

SELECT distinct LISTName 
FROM LIST 
WHERE <my conditions> 
UNION ALL 
SELECT 'No List' as LISTNAME 
WHERE (
    SELECT COUNT(LISTName) 
    FROM LIST 
    WHERE <my conditions> 
    ) < 1000000 

パラメータプロパティで、このデータセットを使用するように[使用可能な値]を設定します。

次に、メインデータセットでWHERE句を更新する必要があります。それはこのようになります:

WHERE (@LIST_Param = 'No List' or @LIST_Param = LISTName) 
+0

こんにちはスティーブンを、「私はあなたの答えを使用してみましたが、私はcouldnドロップダウンリストで「No List」オプションを見つけよう –

+0

@KrishDevクエリを更新し、そのデータセットを使用可能な値に使用するようにパラメータを設定しましたか? – StevenWhite

+0

ええ、私はクエリを更新しました。リストにはリストがありませんでしたが、出力値なしで実行されます。 –

0

私が知っている、これはマイナーですが、スティーブン・ホワイトのソリューションは、個別のカウント数を含めるように、わずかにする必要があります:

COUNT (DISTINCT LISTName) 

あなたはまた、非クラスタ化インデックスを上望みますクエリ内のDISTINCT演算子をサポートするLISTName。このサンプルデータを使用して:

-- Sample data 
CREATE TABLE #LIST (LISTName varchar(10) NOT NULL); 
INSERT #LIST 
SELECT TOP (100) LEFT(newid(), 8) 
FROM sys.all_columns a, sys.all_columns b; 

-- You will probably want LISTName to be indexed 
CREATE NONCLUSTERED INDEX nc_LISTName ON #LIST(LISTName); 

ソリューションは、次のようになります。また、あなたがこれを行うことができ

DECLARE @LIST_Param varchar(8) = 'No List'; 

SELECT LISTName 
FROM 
(
    SELECT distinct LISTName, (SELECT COUNT(DISTINCT LISTName) FROM #LIST) 
    FROM #LIST 
    UNION ALL 
    SELECT 'No List' 
    WHERE (SELECT COUNT(DISTINCT LISTName) FROM #LIST) < 1000000 
) Distinct_LISTName 
WHERE (@LIST_Param = 'No List' or @LIST_Param = LISTName); 

DECLARE @LIST_Param varchar(8) = 'No List'; --'CFA647F7'; 

WITH x AS 
(
    SELECT LISTName, c = COUNT(*) 
    FROM #LIST 
    WHERE (@LIST_Param = 'No List' or @LIST_Param = LISTName) 
    GROUP BY LISTName 
), 
c AS (SELECT s = SUM(c) FROM x) 
SELECT LISTName 
FROM x CROSS JOIN c 
WHERE s < 1000000; 
関連する問題