1

このようなクエリがあります

select distinct
tran_date,
ZONE_NAME,                  
ROUND (nvl(sum(WALKIN_WITHOUT_CGROUP),0)/ COUNT(*),2)APC,
ROUND((nvl(SUM(SALES_VALUE),0)+nvl(sum(total_sales),0)-nvl(sum(net_sales),0)+nvl(sum(discount),0))/nvl(sum(BILLS_WITHOUT_CGROUP),0))ASPB,
from OUTLET_PAYMODE_REPORT_FACT A,OUTLET_DETAILS B
WHERE A.OUTLET_ID=B.OUTLET_ID and SALES_VALUE>0
group by zone_name,tran_date

私の質問は、ここから format===dd-mmm-yyyy の tran_date のような日付フィールドを持っていることです。以下で言及しているような日付フィールドで列の値を区切る必要があります

例えば:

  2012-AUG       ||2013-AUG || 2013-JULY

previous year|| current month || last month

    100       || 200           || 150
    120       || 300           || 500
    etc...
    etc...

このために列とフレームのクエリを分離する方法は?

4

1 に答える 1

1

tran_dateがピボットしたいものであり、それが実際に日付であると仮定すると、次のことができます。

select zone_name,
       sum(case when tran_date between trunc(add_months(sysdate, -12), 'month') and
                                       trunc(add_months(sysdate, -11), 'month')
                then APC
           end) as PrevYear,
       sum(case when tran_date between trunc(add_months(sysdate, 0), 'month') and
                                       trunc(add_months(sysdate, 0), 'month')
                then APC
           end) as CurerntMonth,
       sum(case when tran_date between trunc(add_months(sysdate, -1), 'month') and
                                       trunc(add_months(sysdate, -1), 'month')
                then APC
           end) as LastMonth
from (select tran_date, ZONE_NAME,
             ROUND (nvl(sum(WALKIN_WITHOUT_CGROUP),0)/ COUNT(*),2) as APC,
             ROUND((nvl(SUM(SALES_VALUE),0)+nvl(sum(total_sales),0)- 
                    nvl(sum(net_sales),0)+nvl(sum(discount),0))/nvl(sum(BILLS_WITHOUT_CGROUP),0)
                  ) as ASPB
      from OUTLET_PAYMODE_REPORT_FACT A join
           OUTLET_DETAILS B
           on A.OUTLET_ID=B.OUTLET_ID 
      where SALES_VALUE>0
      group by zone_name,tran_date
     ) t
group by ZONE_NAME;

日付が実際に文字列形式の場合は、日付に変換してから、同じ方法に従います。

于 2013-08-14T10:23:20.480 に答える