تغيير التاريخ ومجموعة من المالية شهر النهاية

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

  •  20-08-2019
  •  | 
  •  

سؤال

ولقد خلق الجدول التالي (عبر UNION ALL):

ID        Date         Hour   Weight    Fiscal
AAA       1/27/2009     0      10         0
AAA       1/30/2009     0      20         0
AAA       2/14/2009     0      10         0
AAA       2/18/2009     0      20         0
AAA       2/27/2009     0      20         0
AAA       2/28/2009     0      20         0
AAA       1/14/2009     10     0          0
AAA       2/14/2009     20     0          0
AAA       2/16/2009     10     0          0
AAA       2/25/2009     10     0          0
AAA       2/26/2009     10     0          0
AAA       3/3/2009          20     0          0
NULL          0                 0      0          1/28/2009
NULL          0                 0      0          2/27/2009
NULL          0                 0      0          3/29/2009

وأود أن استرداد:

    ID      Date        Hour    Weight
    AAA     1/28/2009   10  10
    AAA     2/27/2009   50  50
    AAA     3/29/2009   20  20

ويجب أن أولا تحويل عمود التاريخ إلى نهاية الشهر المالية المقبلة المالية العامة (على سبيل المثال 2007/1/27 -> 2009/01/28، 2009/01/30 -> 2009/02/27، الخ) و ثم مجموعة من تلك القيمة.

وكنت قادرا على استخدام:

    SELECT  ID
    ,       left(CONVERT(VARCHAR(10)
    ,       date, 111),7) as Date
    ,       round(sum(Hours),0) as Hours
    ,       round(sum(Weight),0) as Weight
    FROM    ...
    GROUP   BY ID
    ,       left(CONVERT(VARCHAR(10), date, 111),7)
    ORDER   by ID ASC
    ,       left(CONVERT(VARCHAR(10), date, 111),7) ASC

ولكن هذا مجرد مجموعة ل التقويم التواريخ، وليس وفقا لشهر المالي ينتهي لدي في <ط> المالية العامة العمود.

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

المحلول

وأنت لا ينبغي أن نقابة مواعيد المالية في الجدول الخاص بك. ولكن مع الجدول لديك الآن، هل يمكن أولا إنشاء جدول (باستخدام مع، لذلك لا priviliges الخاصة ضرورية) مع 'فترات "المالية وانضمام هذا الجدول مع الجدول الرئيسي الخاص بك.

ودعوت الجدول الخاص بك SO. كما أتيحت لي لإعادة تسمية الأعمدة إلى شور وCDate لأنه في أوراكل على الأقل التاريخ هو كلمة محجوزة. هل يمكن المحتمل جدا إنشاء الجدول 'الرئيسي' والجدول 'المالية' مباشرة من جداول المصدر لتسريع الامور:

with fiscal_part as (
            select fiscal
            from   SO
            where  fiscal is not null)
,    fiscal as (
            select fb.fiscal         fiscal_begin
            ,      min(fe.fiscal)    fiscal_end
            from   fiscal_part fb right join 
                   fiscal_part fe
                on fe.fiscal > fb.fiscal
            group by fb.fiscal)
,    main as (
            select *
            from   SO
            where  fiscal is null)
select main.ID
,      fiscal.fiscal_end
,      sum(main.cHour)
,      sum(main.weight)
from   main
join   fiscal on main.cdate >= coalesce(fiscal.fiscal_begin, main.cdate)
             and main.cdate <  fiscal.fiscal_end
group by main.ID
,      fiscal.fiscal_end
order by fiscal.fiscal_end

لاحظ أيضا أن بيانات العينة لديه خطأ. يجب أن يكون وزنه لآخر دورة شهرية لك 40 (الصفوف بتواريخ 27/2 و 28/2).

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