المجموعة عند الانضمام إلى نفس الجدول مرتين
سؤال
أنا أكتب استعلام إلى تلخيص بعض البيانات.لدي العلم في الجدول الذي هو في الأساس منطقية, لذا انا بحاجة الى بعض المبالغ تحسب على أساس قيمة واحدة ، ثم نفس الشيء بالنسبة أخرى قيمة مثل:
select
location
,count(*)
,sum(duration)
from my.table
where type = 'X'
and location = @location
and date(some_tstamp) = @date
group by location
ثم نفس أخرى قيمة من نوع العمود.إذا كنت الانضمام إلى هذا الجدول مرتين ، كيف لا تزال المجموعة حتى لا يمكن فقط الحصول على تجميع لكل جدول ، أيعدد(a.*
) بدلا من الاعتماد(*)...
سيكون من الأفضل أن تكتب منفصلة اثنين الاستفسارات?
تحرير
شكرا لكم جميعا لكن ليس هذا ما قصدته.أنا بحاجة للحصول على ملخص حيث type = 'X' وملخص حيث type = 'Y' على حدة...اسمحوا لي وظيفة أفضل مثال على ذلك.ما قصدته هو استعلام مثل هذا:
select
a.location
,count(a.*)
,sum(a.duration)
,count(b.*)
,sum(b.duration)
from my.table a, my.table b
where a.type = 'X'
and a.location = @location
and date(a.some_tstamp) = @date
and b.location = @location
and date(b.some_tstamp) = @date
and b.type = 'Y'
group by a.location
ماذا أحتاج إلى المجموعة ؟ أيضا, DB2 لا يحب الاعتماد(أ.*
), وهو خطأ في بناء الجملة.
المحلول
select
location
,Sum(case when type = 'X' then 1 else 0 end) as xCount
,Sum(case when type = 'Y' then 1 else 0 end) as YCount
,Sum(case when type = 'X' then duration else 0 end) as xCountDuration
,Sum(case when type = 'Y' then duration else 0 end) as YCountDuration
from my.table
where
location = @location
and date(some_tstamp) = @date
group by location
هذا يجب أن تعمل في SQL Server.أعتقد db2 يجب أن يكون شيئا من هذا القبيل.
تحرير:إضافة حيث الشرط للحد من السجلات لتحديد نوع = X أو نوع = ذ ، إذا "نوع" يمكن أن يكون لها قيمة أخرى من X و Y.
نصائح أخرى
المثال الخاص بك مع الانضمام لا يجعل الكثير من معانيها.أنت تفعل منتج الديكارتي بين A و B.هل هذا حقا ما تريده ؟
التالية سوف تجد count(*) ومبلغ(مدة) لكل زوج أن يرضي جملة WHERE.بناء على الوصف, يبدو ان هذا ما تبحث عنه:
select
type
,location
,count(*)
,sum(duration)
from my.table
where type IN ('X', 'Y')
and location = @location
and date(some_tstamp) = @date
group by type, location
لجعل التهم العمل بدلا من الاعتماد(أ.*) فقط لا تعول(أ.الموقع) أو أي دولة أخرى غير-null العمود (PK سيكون من المثالي).
كما أن السؤال الرئيسي ، إما من الإجابات التي قدمها shahkalpesh أو جورج Eadon أعلاه العمل.ليس هناك من سبب في هذا المثال للانضمام إلى طاولة مرتين.