المجموعة عند الانضمام إلى نفس الجدول مرتين

StackOverflow https://stackoverflow.com/questions/227457

  •  03-07-2019
  •  | 
  •  

سؤال

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

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 أعلاه العمل.ليس هناك من سبب في هذا المثال للانضمام إلى طاولة مرتين.

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