3

年齢に基づいてデータをグループ化しようとしています。私は次のデータベース選択を使用します:

select * from (
select 0 range_start, 11 range_end, '0-10 days' date_description from dual union
select 11, 21, '11-20 days' from dual union  
select 21, 31, '21-30 days' from dual union  
select 31, 99999, '31+ days' from dual) date_helper
left outer join table
on table.date <= date_helper.range_start*-1 + sysdate 
and table.date > date_helper.range_end*-1 + sysdate 

次に、date_description列に基づいてグループを作成します。レコードがない場合でも、そのグループに含まれるすべてのグループを表示するようにしています。レコードがない場合は、値を0にして、グループを出力します。

4

2 に答える 2

2

(質問の完全性のために+1。SOへようこそ!)

グループのレコードがない場合、Crystalは明らかにそれを報告できません。データソースに「ヘルパー」テーブルを作成することをお勧めします。これが、ある形式のSQLを使用して行うことです。

  1. 'ヘルパー'テーブルを作成します。1つの列があり、表示するすべてのグループが含まれます。グループの名前が動的である場合は、selectクエリまたはmake-tableクエリを使用することをお勧めします。

  2. ヘルパーテーブルからデータテーブルに正しく結合します。結合されたデータをCrystalに送信します。

  3. Crystalでは、グループ化とagebucketの計算でヘルパーテーブルの列を使用します。

また、計算では、次の行を追加する必要があります。Else "No age";

于 2010-10-04T20:48:25.157 に答える
0

PowerUserの回答に対するコメントを拡張して、(Crystalのデータベースエキスパートを使用する代わりに)独自のSQLを入力できるバージョンのCrystalを使用している場合は、ヘルパーテーブルとして機能するサブクエリを設定できます。お気に入り:

select * from (
select 0 range_start, 11 range_end, '0-10 days' date_description from dual union
select 11, 21, '11-20 days' from dual union  
select 21, 31, '21-30 days' from dual union  
select 31, 99999, '31+ days' from dual) date_helper
left outer join 
(select sysdate-5 mydate from dual union all 
 select sysdate - 25 from dual) mytable
on mytable.mydate <= date_helper.range_start*-1 + sysdate 
and mytable.mydate > date_helper.range_end*-1 + sysdate 

(Oracle構文-クエリの正確な構文は、使用しているSQLの方言によって異なります。)

編集:SQLServerからOracle構文に変更されました。

さらに編集:いくつかの簡単なサンプルデータを追加しました。

于 2010-10-05T14:01:21.517 に答える