2014-10-11 101 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