سؤال

أحاول تجميع بياناتي على أساس العمر. يمكنني استخدام قاعدة البيانات التالية حدد:

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 ، ولا تزال طباعة المجموعة.

هل كانت مفيدة؟

المحلول

التوسع في تعليق على إجابة 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 Syntax - سوف يختلف بناء الجملة الدقيق للاستعلام اعتمادًا على لهجة SQL التي تستخدمها.)

تحرير: تم تغييره من SQLServer إلى Oracle Syntax.

مزيد من التحرير: أضيفت بعض بيانات العينة البسيطة.

نصائح أخرى

(+1 لاكتمال سؤالك. مرحبًا بك في ذلك!)

إذا لم تكن هناك سجلات لمجموعة ، فمن الواضح أن Crystal لا تستطيع الإبلاغ عنها. أوصي بإنشاء جدول "مساعد" في مصدر البيانات الخاص بك. إليك ما سأفعله باستخدام شكل من أشكال SQL:

  1. اصنع طاولة "مساعد". سيكون له عمود واحد وسيحتوي على جميع المجموعات التي تريد عرضها. إذا كانت أسماء المجموعات ديناميكية ، فقد ترغب في استخدام استعلام محدد أو استعلام طاولة.

  2. الانضمام الصحيح من جدول المساعد الخاص بك إلى جدول البيانات الخاص بك. إرسال البيانات المشتركة إلى Crystal.

  3. في Crystal ، استخدم عمود جدول المساعد في مجموعاتك وحسابات Agebucket.

أيضا ، في الحساب الخاص بك ، يجب عليك إضافة خط: Else "No age";

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top