2016-03-28 79 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

相关问题