1

やあみんな、だから私は私がさまざまな年齢のバケツにグループ化しているというこのレポートを持っています。この年齢バケットに関連付けられている行がない場合は、年齢バケットのカウントをゼロにします。そのため、データベース選択で外部結合を実行しましたが、これは正常に機能します。ただし、データベースの別の列に基づいてグループを追加する必要があります。

このグループを追加すると、行が関連付けられていないagebucketsが消えます。グループ化しようとした列がその行でnullだったためかもしれないと思ったので、選択に行番号を追加し、それでグループ化しました(基本的には各行でグループ化する必要があります。詳細に入れるだけではありません...必要に応じて、これについて詳しく説明できます)。ただし、行番号を追加した後でも、データのないagebucketsはnullのままです。追加したこのグループを削除すると、すべての年齢バケットが取得されます。

何か案は?ありがとう!!

4

2 に答える 2

2

これは、年齢グループへの外部結合は、他のグループへの外部結合でもないためです。データセットごとに各年齢グループの1つだけが保証され、[他のグループ]ごとに各年齢グループの1つが保証されるわけではありません。

したがって、たとえば、他のグループが地域である場合、残りの部分に外部結合する前に、年齢範囲テーブルから地域テーブルへのデカルト/クロス結合が必要です(年齢範囲と地域のすべての可能な組み合わせを取得できるようにするため)。データセット。

編集-コメントに基づいて、次のようなクエリが機能するはずです:

select date_helper.date_description, c.case_number, e.event_number
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
cross join case_table c
left outer join event_table e
on e.event_date <= date_helper.range_start*-1 + sysdate 
and e.event_date > date_helper.range_end*-1 + sysdate
and c.case_number = e.case_number

(バケットにグループ化する必要があるのはevent_dateであると想定しています。)

于 2010-10-25T09:58:55.397 に答える
1

私はあなたの質問を理解するのに苦労しました。

CrystalReportsのNULLサポートがかなり基本的な方法で欠けていることを私は知っています。だから私は通常それに依存しないようにしています。

この問題に取り組む1つの方法は、データベースクエリに年齢範囲をハードコーディングすることです。例:

  SELECT p.person_type
         , SUM(CASE WHEN 
               p.age <= 2 
               THEN 1 ELSE 0 END) AS "0-2"
         , SUM(CASE WHEN 
               p.age BETWEEN 2 AND 18 
               THEN 1 ELSE 0 END) AS "3-17"
         , SUM(CASE WHEN 
               p.age >= 18 
               THEN 1 ELSE 0 END) AS "18_and_over"
    FROM person p
GROUP BY p.person_type

このようにして、ゼロが必要な場所で確実にゼロを取得できます。

これはあなたの質問に対する直接の答えではないことを私は理解しています。幸運を祈ります。

于 2010-10-22T21:51:41.203 に答える