2017-02-15 25 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 

我試圖做的是:如果用戶選擇的一年,我把最後一個條件在評論中,結果應該是:

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:

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

很顯然,這是不好的, 我或/和類似的嘗試:

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

如果'USER_PARAM' = 'MONTH'是真實的 - >這是行不通的,因爲我所有的年(不是當前)

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

如果'USER_PARAM' = 'MONTH'是假>這是行不通的,因爲我沒有任何數據

回答

1

你剛纔顛倒你的狀況。
替換「月」由「YEAR」,改變「和」有一個「OR」,你是好去。

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

非常感謝您的幫助!我是塊就可以了...接近,但受阻 – Bob

1

與可選的(我相信),允許空是一個外卡或默認的用戶參數來工作的最佳方法。

所以,如果你有一個參數@month可以爲空,則下面的工作

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

有了這個說法,如果@month爲null,則一切相匹配,否則它過濾

所以,如果你只想當月默認可以使用

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

感謝您的幫助。我的參數不是可選的:它的值可以是'月'或'年',但不能爲空或空。這是強制性的。 什麼是最好的解決辦法嗎?我明白AXMIM答案,因爲我是在以同樣的方式 – Bob

+1

@FannyV - 如果是我,我會用上面的查詢和年份或月份設置爲根據指示非空值,因爲大多數系統都做了優化合並的速度比要麼 – Hogan