2014-10-11 102 views
0

我有以下幾列獲取每天的產品銷售平均計算具有積極的銷售

SELECT DATE, WEEK, BRANCH, PROD, TARGETREACH 
FROM TARGETSALE 
WHERE BRANCH = 1 
AND WEEK BETWEEN 52 AND 53; 

DATE  WEEK BRANCH PROD TARGETREACH 
------------------------------------------------------------------- 
01/09/2014 52  1  1  50 
02/09/2014 52  1  1  -10 
03/09/2014 52  1  1  50 
04/09/2014 52  1  1  50 
05/09/2014 52  1  1  40 
06/09/2014 52  1  1  -10 
07/09/2014 53  1  1  -5 
08/09/2014 53  1  1   0 
09/09/2014 53  1  1  10 
10/09/2014 53  1  1  20 
11/09/2014 53  1  1  30 
12/09/2014 53  1  1  40 
13/09/2014 53  1  1   0 
01/09/2014 52  1  2  20 
02/09/2014 52  1  2   0 
03/09/2014 52  1  2   0 
04/09/2014 52  1  2  10 
05/09/2014 52  1  2  20 
06/09/2014 52  1  2  10 
07/09/2014 53  1  2  -10 
08/09/2014 53  1  2  10 
09/09/2014 53  1  2  -10 
10/09/2014 53  1  2  20 
11/09/2014 53  1  2  20 
12/09/2014 53  1  2  40 
13/09/2014 53  1  2   0 
01/09/2014 52  1  3  30 
02/09/2014 52  1  3  30 
03/09/2014 52  1  3   5 
04/09/2014 52  1  3   0 
05/09/2014 52  1  3  10 
06/09/2014 52  1  3  -10 
07/09/2014 53  1  3  -10 
08/09/2014 53  1  3  -10 
09/09/2014 53  1  3  20 
10/09/2014 53  1  3  10 
11/09/2014 53  1  3  40 
12/09/2014 53  1  3  10 
13/09/2014 53  1  3  10 

「targetsales」這個表TARGETSALE天數顯示銷售了多少超過目標,其中負數表示銷售額低於目標多少。我如何做到以下幾點: 1.我需要獲得每天所有產品的平均值。事情是這樣的:

DATE  BRANCH AVERAGE_SALES_OF_ALL_PRODUCT 
    01/09/2014 1  33.33 
    02/09/2014 1  -1.67 
    ...and so on 
  • 然後我需要另一個查詢,顯示如何在這兩週內的許多日子,有積極的平均銷售。事情是這樣的:

    BRANCH 2WEEKS_SINCE DAYS_WITH_POSITIVE_AVERAGE_SALES 
    1  53    9 
    
  • 以上只是舉個例子不是一個真實的結果。 對不起,希望這不是太混亂。非常感謝。

    +0

    儘管使用SQL服務器而不是Oracle。但它應該工作。第一個 - 選擇[date],分支,總和(targetreach)/ COUNT(prod)作爲[avg] from targetsale group by [date],branch' – 2014-10-11 08:18:28

    +0

    @BoratSagdiyev,謝謝!第二個怎麼回事? :) – joeyy27 2014-10-11 09:33:09

    回答

    2

    在Oracle中,date型仍然可能有一個時間分量。如果你不知道這是不是在那裏,然後用trunc()將其刪除:

    select trunc(date), branch, avg(targetreach) 
    from targetsale 
    group by truncdate, branch 
    order by 1, 2; 
    

    對於第二個查詢,您要使用case

    select branch, count(distinct case when targetreach > 0 then date end) as DaysWithPositiveSales 
    from targetsales 
    group by branch; 
    

    如果你知道有每一個行每個分支的日期 - 和日期的時間部分是空的 - 那麼distinct是沒有必要的。

    +0

    非常感謝。簡單並且確實有意義 – joeyy27 2014-10-11 23:34:33

    0

    1)

    SELECT TRUNC(DATE, 'DD'), BRANCH, SUM(TARGETREACH) 
    FROM TARGETSALE WHERE BRANCH = 1 AND WEEK BETWEEN 52 AND 53 
    GROUP BY TRUNC(DATE, 'DD'), BRANCH; 
    

    2)

    SELECT BRANCH, SUM(DECODE(ABS(TARGETREACH), 1, 1, 0) 
    FROM TARGETSALE WHERE BRANCH = 1 AND WEEK BETWEEN 52 AND 53 
    GROUP BY BRANCH; 
    
    +0

    感謝您的幫助 – joeyy27 2014-10-12 00:10:50