2017-02-15 5 views
0

私のクエリをフィルタリングしようとしているのは、ユーザが選択した期間(月または年)に依存します。 BIRTでパラメータを取得します。ユーザが選択したパラメータに依存するクエリをどのようにフィルタリングできますか?

私のクエリは次のとおりです。

SELECT DATE 
FROM TABLE 
WHERE Year(DATE) = Year(CURRENT_TIMESTAMP) AND Month(DATE) = Month(CURRENT_TIMESTAMP) 

私の結果は次のとおりです。私は何をしようとしていること

DATE 
2017-02-14 
2017-02-14 
2017-02-14 
2017-02-14 
2017-02-14 
2017-02-14 
2017-02-14 
2017-02-01 
2017-02-02 

です:ユーザーが選択年、私はコメントで最後の条件を置けば、結果は次のようになります。

0:

DATE 
2017-02-14 
2017-02-14 
2017-02-14 
2017-02-14 
2017-02-14 
2017-02-14 
2017-02-14 
2017-01-25 
2017-01-26 
2017-02-01 
2017-02-02 
2017-01-20 
2017-01-20 
2017-01-20 
2017-01-20 
2017-01-20 
2017-01-20 
2017-01-20 
2017-01-20 
2017-01-20 

は、私のような場合に試してみました

CASE WHEN USER_PARAM = 'month' then Month(DATE) = Month(CURRENT_TIMESTAMP) END 

は明らかに、これは私が試したOR/ANDのような、 良いではありません。

Year(DATE) = Year(CURRENT_TIMESTAMP) 
    OR ('USER_PARAM' = 'MONTH' AND Month(DATE) = Month(CURRENT_TIMESTAMP)) 

'USER_PARAM' = 'MONTH'がtrueの場合 - 私はすべての年(ではない現在のもの)を持っているので>これが動作しません

Year(DATE) = Year(CURRENT_TIMESTAMP) 
    AND ('USER_PARAM' = 'MONTH' AND Month(DATE) = Month(CURRENT_TIMESTAMP)) 

'USER_PARAM' = 'MONTH'これは動作していない偽>であれば、私は、任意のデータに

答えて

1

を持っていないので、あなたは持っていますあなたの状態を逆転させた。
'MONTH'を 'YEAR'に置き換え、 'AND'を 'OR'に変更してください。

Year(DATE) = Year(CURRENT_TIMESTAMP) 
AND ('USER_PARAM' = 'YEAR' OR Month(DATE) = Month(CURRENT_TIMESTAMP)) 
+0

ありがとうございました!私はそれにブロックされていた...閉鎖しかしブロック – Bob

1

オプションのユーザーパラメータで作業する最善の方法は、nullをワイルドカードまたはデフォルトにすることができると思います。

あなたはnullにすることができ、パラメータ@monthを持っている場合@monthがnullの場合、以下はこの文で

WHERE MONTH(DATE) = COALESCE(@month,MONTH(DATE)) 

に動作しますので、その後、すべてはあなたの場合はそれ以外の場合はそう

をフィルタリング一致します

:あなたは

WHERE MONTH(DATE) = COALESCE(@month,MONTH(CURRENT_TIMESTAMP)) 

文は次のようになりますどこ最終的に使用することができ、デフォルトでのみ当月たい

WHERE YEAR(DATE) = COALESCE(@year,YEAR(CURRENT_TIMESTAMP)) 
    AND MONTH(DATE) = COALESCE(@month,MONTH(CURRENT_TIMESTAMP)) 
+0

あなたの助けをありがとう。私のパラメータはオプションではありません: '月'または '年'の値を持つことができますが、nullでも空でもありません。それは必須です。 最適なソリューションは何ですか?私は同じ方法であったので、AXMIMの答えを理解しています – Bob

+1

@FannyV - それは私の場合、私は上記のクエリを使用し、ほとんどのシステムがより早く合体するように最適化されているため、または – Hogan

関連する問題