2016-03-28 20 views
1

私はstackoverflowから私に提案された次のクエリを使用しています。次のクエリは、現在の年(> 2016、< 2017)と前年(> 2015、< 2016)を表示するために日付を使用しています。私はこれをBirtレポートで使用したいと思います。特に、日付を選択するようにユーザーに促し(デフォルトでは現在の日付が選択されます)、クエリは自動的に1年を引いて現在の年の結果と前年の結果を計算します。 Here's the code given to me現在の年と前年の間のバットレポートと日付パラメータ

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; 

誰もがこの報告書でこれを行う方法を提案できますか?

+0

質問は「神託」としてタグ付けされていますが、SQLの構文は、Oracle SQLではありません! – hvb

+0

しかし、それは私のOracle環境で動作します – charilaos13

答えて

1

BirtのSQLクエリにパラメータを追加する方法については、my answer hereをご覧ください。レポートパラメータを追加して、最初にユーザからの日付を入力する必要があります。

入力パラメータから年を減算するには、パラメータを追加するSQLクエリ内で、DATEADDに1年間の負の値を使用する必要があります。

は、クエリが入力パラメータの日付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年と2017年の昨年の結果を見ることができるように、私は2018年にしました。これがもっと物語的な答えであるかどうかを教えてください。 – charilaos13

+0

私は上記のクエリが2015年と2016年の間に限られていることを理解できますか?もしそうなら、どうすれば個々の年のために働くことができますか? – charilaos13

+0

クエリのパラメータを使用するには、 '' 2015-01-01 'と ''2016-01-01'の出現を'? 'で置き換える必要があります。あなたはいつでも好きな場所でそれらを使うことができ、where節に限定されません。 – Simulant

関連する問題