سؤال

وعندي استفسار مع الجداول التالية (خفض فقط لاظهار الأعمدة المعنية).

t1
code

t2
code, period, status

t3
period, desc

والآن ما قلته هو،

وT3 هو جدول "فترات" فريدة من نوعها.

وT1 هو جدول الرموز فريدة من نوعها.

وT2 هو الانضمام الجدول ربط الاثنين معا، جنبا إلى جنب مع حالة، على سبيل المثال هذا الوضع = (A، B، C).

ما أفعله هو خلق نتيجة الاستعلام التي يتم تجميعها من قبل "فترة" ولديه عدد من "رموز" في كل حالة.

وهذا هو السهل حل، ولكن نريد أريد أن تمديد هذا، هو أن يكون ليس فقط على عدد من "كود في A، B و C ولكن أيضا عدد من الرموز التي لا ترتبط مع فترة أو وبعبارة أخرى، فإن عدد الرموز التي ليست في T2 لفترة معينة.

وهكذا النتيجة أنا أبحث عن هو

Period    A    B    C   (Codes from t1 not found in t2)
P1        10   5    2   3
P2        5    5    5   10
هل كانت مفيدة؟

المحلول

ويمكنك استخدام عبر الانضمام لتحديد مصفوفة من كل رموز لجميع الفترات. التي تسمح لك لحساب الصفوف التي ليست موجودة:

select
    sum(case when t2.status is 'A' then 1 else 0 end) as ACount,
    sum(case when t2.status is 'B' then 1 else 0 end) as BCount,
    ...
    sum(case when t2.code is null then 1 else 0 end) as NotPresentCount
from       t1
cross join t3
left join  t2 
on         t2.code = t1.code and t2.period = t3.period
group by   t3.period
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top