سؤال
وعندي استفسار مع الجداول التالية (خفض فقط لاظهار الأعمدة المعنية).
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
لا تنتمي إلى StackOverflow