2017-08-18 28 views
0

SSRSでレポートを作成しています。ここでは、異なる日付フィールドでフィルタを使用できるようにする必要があります。彼らは、そのフィルタ内で日付フィルタと開始日と終了日を選択できる必要があります。Where句を使用してWhere句を使用してパラメータ化された列を使用する

これは私が達成しようとしています何の単純化した例である:

@datetypefilerは、基本的にユーザーが(すなわちProject.Update_DateまたはProject.Due_Dateなど)でフィルタしたいフィールドを等しくなります
SELECT Project.ProjectID, Project.Name, Project.Update_Date, Project.Due_Date, Project.Start_Date, Project.Review_Date 
FROM Project 
WHERE @datetypefiler BETWEEN @startdate AND @enddate 

SSRSでは、さまざまな日付フィールドと等しい@datetypefilerのパラメータを構築し、開始日と終了日のフィルタを期待どおりに設定しました。

@datetypefilerをこのようにパラメータ化できるかのようには思われません。私はそのように、ケースのキーワードを使用しようとしました:

SELECT Project.ProjectID, Project.Name, Project.Update_Date, Project.Due_Date, Project.Start_Date, Project.Review_Date 
FROM Project 
WHERE CASE 
when @datetypefiler='Project.Update_Date' then Project.Update_Date BETWEEN @startdate AND @enddate 
when @datetypefiler='Project.Due_Date' then Project.Due_Date BETWEEN @startdate AND @enddate 

このありえないが、どちらか私のために働いて、私の代わりに暗闇の中でショットを取る、私は正しい方法はどのように見えるかを問う必要があることを把握します。 @datetypefilerが一致した場合

SELECT * 
FROM Project 
WHERE (@datetypefiler='Project.Update_Date' 
        AND Project.Update_Date BETWEEN @startdate AND @enddate) 
    OR (@datetypefiler='Project.Due_Date' 
        AND Project.Due_Date BETWEEN @startdate AND @enddate) 

ORは唯一のフル文を評価します。この上の任意のアドバイスを大幅に

答えて

1

それとも、他の2つの答えの両方がうまく動作しようとしているが、それらは、索引を使用することはありません。この

SELECT Project.ProjectID, Project.Name, Project.Update_Date, Project.Due_Date, 
Project.Start_Date, Project.Review_Date 
FROM Project 
where 
(CASE 
when @datetypefiler = 'Project.Update_Date' then Project.Update_Date 
when @datetypefiler= 'Project.Due_Date' then Project.Due_Date 
END) BETWEEN @startdate AND @enddate 
+0

ありがとう、これはトリックをしたようです! – SqlQuery123

2

あなたはこのような何かを試みることができる、いただければ幸いです。

+0

アドバイスありがとう! Rexのソリューションは、開始日と終了日が一度だけ処理されるという点で、少し洗練されていますが、理論的にはあなたのものとまったく同じで、最初に投稿したという点で、私が試みた最初のものです。私を助けてくれたあなたとRexの両方に信用を与えてくれて、とても感謝しています! – SqlQuery123

+0

@ sqlquery123性能が懸念される場合は、私と受け入れられたソリューションの実行計画をチェックする価値があります。 – Tanner

0

を試みることができます。あなたの基準に基づいて2つの異なるクエリを持つ2つの別々のSELECTステートメントを用意することをお勧めします。この方法でテーブルをUpdate_DateDue_Dateの両方に索引付けして実際にクエリを高速化することができます。

+0

なぜ後でインデックスを使用しないのですか? – Uueerdo

+0

または2つの異なる列の条件。自分で試してみてください –

+0

私はそれが主にMS SQL Serverが苦しんでいないMySQLの制限だと思っていました。 – Uueerdo

関連する問題