2013-05-02 77 views
0

下面是我的表中的內容:表演上的某些行算術運算和顯示結果

select * from summary_weekly_sales; 

DISTRIBUTOR DATE_OF_ACTIVATION NUMBER_OF_SALES 
-------------- ------------------ --------------- 
charan   25-APR-13    23 
charan   26-APR-13    2 
charan   28-APR-13    5 
charan   29-APR-13    50 
anil   25-APR-13    13 
anil   26-APR-13    4 
anil   28-APR-13    5 
anil   29-APR-13    30 

在利用iReport DATE_OF_ACTIVATION是輸入參數(但在這裏,我以date_of_activation爲29-APR-13),我所要的輸出顯示如下:

DISTRIBUTOR avg_sales_week NUMBER_OF_SALES 
-------------- --------------- --------------- 
charan   10    50 

anil   7.33   30 

其中,

avg_sales_week是平均一週每個分銷商的銷售額7天背面29-APR-13)的

即用於查蘭分配器平均=(5 + 2 + 23)/ 3

Number_Of_Sales在銷售上29-APR-13

完成

我嘗試使用oracle的wm_concat函數,但它沒有按預期工作。

有什麼辦法可以得到上面的預期結果。

問候, 查蘭

+0

我認爲不可能一次完成這個請求,因爲如果你有一個像DATE_OF_ACTIVATION = 29-APR-13這樣的子句,你不能計算** anil **的平均銷售額 – Nagasaki 2013-05-02 12:40:23

+0

,因爲分銷商平均值是(13 + 4 + 3)/ 3即10 – kattashri 2013-05-02 12:45:22

+0

看看Oracle分析函數 – OldProgrammer 2013-05-02 12:57:40

回答

2

這將做到這一點:

select distributor 
,  sum(case when date_of_activation < date '2013-04-29' 
      then number_of_sales end) 
    /count(distinct case when date_of_activation < date '2013-04-29' 
      then date_of_activation end) as avg_sales_week 
,  sum(case when date_of_activation=date '2013-04-29' 
      then number_of_sales end) number_of_sales 
from summary_weekly_sales 
where date_of_activation between date '2013-04-29' - 7 and date '2013-04-29' 
group by distributor; 

DISTRIBUTO AVG_SALES_WEEK NUMBER_OF_SALES 
---------- -------------- --------------- 
anil   7.33333333    30 
charan     10    50 

僅僅通過你的參數名稱替換date '2013-04-29'例如p_date在程序中使用。

+0

我從來沒有見過像這樣的查詢。 – kattashri 2013-05-02 13:57:09

+0

Hi @Tony,是否有可能在查詢中獲得average_sales_week和number_of_sales之間的絕對差異 – kattashri 2013-05-03 05:26:29

+0

@kattashri:不確定你的意思 - 你的意思是減去另一個?如果是這樣的話,你可以將查詢包裝在另一個查詢中,並將'select distribution,avg_sales_week,number_of_sales,number_of_sales-avg_sales_week與[(上面的查詢)]區別開來' – 2013-05-03 09:09:03

0
select 
distributor, 
sum(number_of_sales)/
    (select count(*) from summary_weekly_sales sws2 where sws2.distributor = distributor and sws2.date_of_activation > '29-APR-13' - 7) 
as avg_sales_week, 
number_of_sales 
FROM summary_weekly_sales 
WHERE DATE_OF_ACTIVATION > '29-APR-13' - 7 
GROUP BY distributor 

也許這應該幫助。