2016-03-28 73 views
1

我正在使用以下由查詢計算器向我推薦的查詢。以下查詢使用日期以使當前年份(> 2016,< 2017)和上一年(> 2015年,< 2016)保持一致。我想在Birt報告中使用它 - 特別提示用戶選擇日期(默認情況下會選擇當前日期),並自動查詢將扣除一年,以計算當年的結果和上一年的結果。 Here's the code given to me當前年份和上一年之間的Birt報表和日期參數

SELECT grade, 
     COUNT(DISTINCT CASE WHEN DATE '2015-01-01' >= date_column 
          AND date_column < DATE '2016-01-01' 
          THEN customer_id END 
      ) AS number_of_unique_customers_in_2015, 
     COUNT(DISTINCT CASE WHEN DATE '2016-01-01' >= date_column 
          AND date_column < DATE '2017-01-01' 
          THEN customer_id END 
      ) AS number_of_unique_customers_in_2016 
FROM Customers 
WHERE Date_Column >= DATE '2015-01-01' 
AND Date_Column < DATE '2017-01-01' 
GROUP BY grade; 

任何人都可以建議如何在birt報告中做到這一點?

+0

問題被標記爲「甲骨文」,但SQL語法是不是Oracle SQL!? – hvb

+0

但它適用於我的Oracle環境 – charilaos13

回答

1

看看my answer here看看如何向Birt中的SQL查詢添加參數。您應該添加報表參數以首先輸入用戶的日期。

要從輸入參數中減去一年,您應在使用SQL查詢內添加參數的情況下使用DATEADD,其值爲負值一年。

您的查詢應該是這樣的輸入參數日期2016-01-01

SELECT grade, 
     COUNT(DISTINCT CASE WHEN DATEADD(year, -1, ?) >= date_column 
          AND date_column < ? 
          THEN customer_id END 
      ) AS number_of_unique_customers_in_last_year, 
     COUNT(DISTINCT CASE WHEN ? >= date_column 
          AND date_column < DATEADD(year, 1, ?) 
          THEN customer_id END 
      ) AS number_of_unique_customers_in_current_year 
FROM Customers 
WHERE Date_Column >= DATEADD(year, -1, ?) 
AND Date_Column < DATEADD(year, 1, ?) 
GROUP BY grade; 
+0

您的答案有幫助,但年限之間有限制嗎?我的意思是在上面的查詢例子中,我希望用戶選擇一年2018年,以便我可以顯示任何當年的結果,在這種情況下是2018年和去年的2017年。讓我知道這是一個更具敘述性的答案。 – charilaos13

+0

從我能理解的上述查詢是有限的2015年和2016年對嗎?如果是,那麼我怎麼才能做到這一點,以便爲單個年份工作? – charilaos13

+0

您必須在查詢中用'?'替換''2015-01-01''和''2016-01-01''的出現位置以在查詢中使用參數。你可以在任何你想使用的地方使用它們,它們不限於where子句。 – Simulant

相關問題