سؤال

ويقول لدي جدولين:

وKnownHours:

ChargeNum    CategoryID    Month    Hours
111111       1             2/1/09   10
111111       1             3/1/09   30
111111       1             4/1/09   50
222222       1             3/1/09   40
111111       2             4/1/09   50

وUnknownHours:

ChargeNum   Month   Hours
111111      2/1/09  70
111111      3/1/09  40.5
222222      7/1/09  25.5

وأحتاج إلى مجموعة هذه الساعات، وتجاهل شهر، في جدول بيانات واحدة بحيث نتيجتي المتوقعة هي التالية:

ChargeNum    CategoryID     Hours
111111       1              90
111111       2              50
111111       Unknown        110.5
222222       1              40
222222       Unknown        25.5

وأنا لا يمكن أن يبدو لهذا الرقم. أي مساعدة سيكون موضع تقدير كبير!

وتحرير: أنا بحاجة إلى مجموع الساعات لكل تركيبة ChargeNum / الفئة. لقد قمت بتحديث البيانات عينة لإظهار هذا.

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

المحلول

وستحتاج إلى استخدام UNION الجمع بين نتائج دراستين استفسار. في الحالة الخاصة بك:

SELECT ChargeNum, CategoryID, SUM(Hours)
FROM KnownHours
GROUP BY ChargeNum, CategoryID
UNION ALL
SELECT ChargeNum, 'Unknown' AS CategoryID, SUM(Hours)
FROM UnknownHours
GROUP BY ChargeNum

ملحوظة - إذا كنت تستخدم UNION ALL كما في أعلاه، فإنه ليس أبطأ من تشغيل الاستعلامات اثنين بشكل منفصل تماما كما هي لا مكررة تدقيق

.

نصائح أخرى

في الإخراج المتوقع، كنت قد حصلت على الثاني الصف الأخير مبلغ غير صحيح، ينبغي أن يكون 40 وفقا للبيانات في الجداول الخاصة بك، ولكن هنا هو الاستعلام:

Select  ChargeNum, CategoryId, Sum(Hours)
From    (
    Select  ChargeNum, CategoryId, Hours
    From    KnownHours
    Union
    Select  ChargeNum, 'Unknown' As CategoryId, Hours
    From    UnknownHours
) As a
Group By ChargeNum, CategoryId
Order By ChargeNum, CategoryId

وهنا هو الإخراج:

ChargeNum  CategoryId 
---------- ---------- ----------------------
111111     1          40
111111     2          50
111111     Unknown    70
222222     1          40
222222     Unknown    25.5

ويمكن أن نأخذ هذا خطوة أبعد ويقول أريد فقط أن نرى الصفوف عندما يقترن التي لديها 50 ساعة أو أكثر ... لقد حاولت ذلك، ولكن الحصول على خطأ أنه لا يمكن العثور SumHours ...

Select  ChargeNum, CategoryId, Sum(Hours) As SumHours
From    (
    Select  ChargeNum, CategoryId, Hours
    From    KnownHours
    Union
    Select  ChargeNum, 'Unknown' As CategoryId, Hours
    From    UnknownHours
) As a
WHERE (SumHours>=50)
Group By ChargeNum, CategoryId
Order By ChargeNum, CategoryId

وهكذا حاولت

    Select  ChargeNum, CategoryId, Sum(Hours) As SumHours
From    (
    Select  ChargeNum, CategoryId, Hours
    From    KnownHours
    Union
    Select  ChargeNum, 'Unknown' As CategoryId, Hours
    From    UnknownHours
) As a
WHERE (Hours>=50)
Group By ChargeNum, CategoryId
Order By ChargeNum, CategoryId

ولكن هذا لا يعطي مجموع ساعات على كلا الجدولين ...

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