2012-12-26 165 views
0

在我工作的项目中,我们需要获得每月,每季度和每年的客户销售总额。我试了下面显示的查询,今天得到正确的结果。但我还需要去年的销售业绩。 (过去几年月度销售是个总和)oracle销售总查询

我真的需要一个快速修复这里,感谢每一个评论提前

SELECT  
CUSTOMER,   
PRODUCT, 
EXTRACT(MONTH FROM DAY) MONTH, 
EXTRACT(YEAR FROM DAY) YEAR, 
SUM(
    CASE 
     WHEN DAY >= TRUNC(sysdate,'MM') 
     THEN DAILY_SALE 
     ELSE 0 
    END) AS MONTH_SALE, 
SUM(
    CASE 
     WHEN DAY >= add_months(TRUNC(sysdate,'MM'),-3) 
     AND DAY < TRUNC(sysdate,'MM') 
     THEN DAILY_SALE 
     ELSE 0 
    END) AS THREE_MONTHL_SALE, 
SUM(
    CASE 
     WHEN DAY >= add_months(TRUNC(sysdate,'MM'),-6) 
     AND DAY < TRUNC(sysdate,'MM') 
     THEN DAILY_SALE 
     ELSE 0 
    END) AS SIX_MONTHL_SALE, 
SUM(
    CASE 
     WHEN DAY >= add_months(TRUNC(sysdate,'MM'),-12) 
     AND DAY < TRUNC(sysdate,'MM') 
     THEN DAILY_SALE 
     ELSE 0 
    END) AS YEAR_SALE 
FROM 
SALES_TABLE 
GROUP BY 
CUSTOMER, 
PRODUCT, 
EXTRACT(MONTH FROM DAY), 
EXTRACT(YEAR FROM DAY) 
+0

问题是什么用您的查询?你能提供你正在寻找的结果吗? –

+0

您的查询将根据当前日期为您提供三个月的分组......如果您在四分之一个月结束的月份运行查询,那么这只会与公司宿舍等同。所以,我的问题是,当你说“宿舍”时,你的意思是1月 - 2月 - 3月总是第1季度,还是你需要它来改变你的查询的方式? – Chipmonkey

回答

0

这可能会帮助你想要的......它为您提供了总计每个月和每个季度,以及全年,每年。如果你想要某一年,我会建议添加一个“where EXTRACT(YEAR FROM DAY)= 2012”或类似的条款。

我相信这是你所要求的,但这与你提供的样本不同。您提供的样本提供了3,6,9和12个月的销售额,这与季度年和月不同。不过,如果需要,您可以轻松混搭。

SELECT  
CUSTOMER,   
PRODUCT, 
EXTRACT(YEAR FROM DAY) YEAR, 
SUM(DAILY_SALE) as YEAR_SALES, 
SUM(CASE WHEN TO_CHAR(DAY, 'MM') = '01' THEN DAILY_SALE ELSE 0 END) AS MONTH_01_SALES, 
SUM(CASE WHEN TO_CHAR(DAY, 'MM') = '02' THEN DAILY_SALE ELSE 0 END) AS MONTH_02_SALES, 
SUM(CASE WHEN TO_CHAR(DAY, 'MM') = '03' THEN DAILY_SALE ELSE 0 END) AS MONTH_03_SALES, 
SUM(CASE WHEN TO_CHAR(DAY, 'MM') = '04' THEN DAILY_SALE ELSE 0 END) AS MONTH_04_SALES, 
SUM(CASE WHEN TO_CHAR(DAY, 'MM') = '05' THEN DAILY_SALE ELSE 0 END) AS MONTH_05_SALES, 
SUM(CASE WHEN TO_CHAR(DAY, 'MM') = '06' THEN DAILY_SALE ELSE 0 END) AS MONTH_06_SALES, 
SUM(CASE WHEN TO_CHAR(DAY, 'MM') = '07' THEN DAILY_SALE ELSE 0 END) AS MONTH_07_SALES, 
SUM(CASE WHEN TO_CHAR(DAY, 'MM') = '08' THEN DAILY_SALE ELSE 0 END) AS MONTH_08_SALES, 
SUM(CASE WHEN TO_CHAR(DAY, 'MM') = '09' THEN DAILY_SALE ELSE 0 END) AS MONTH_09_SALES, 
SUM(CASE WHEN TO_CHAR(DAY, 'MM') = '10' THEN DAILY_SALE ELSE 0 END) AS MONTH_10_SALES, 
SUM(CASE WHEN TO_CHAR(DAY, 'MM') = '11' THEN DAILY_SALE ELSE 0 END) AS MONTH_11_SALES, 
SUM(CASE WHEN TO_CHAR(DAY, 'MM') = '12' THEN DAILY_SALE ELSE 0 END) AS MONTH_12_SALES, 
SUM(
    CASE 
     WHEN TO_CHAR(DAY, 'MM') IN ('10', '11', '12') 
     THEN DAILY_SALE 
     ELSE 0 
    END) AS Q4_SALES, 
SUM(
    CASE 
     WHEN TO_CHAR(DAY, 'MM') IN ('07', '08', '09') 
     THEN DAILY_SALE 
     ELSE 0 
    END) AS Q3_SALES, 
SUM(
    CASE 
     WHEN TO_CHAR(DAY, 'MM') IN ('04', '05', '06') 
     THEN DAILY_SALE 
     ELSE 0 
    END) AS Q2_SALES, 
SUM(
    CASE 
     WHEN TO_CHAR(DAY, 'MM') IN ('01', '02', '03') 
     THEN DAILY_SALE 
     ELSE 0 
    END) AS Q1_SALES, 
FROM 
SALES_TABLE 
GROUP BY 
CUSTOMER, 
PRODUCT, 
EXTRACT(YEAR FROM DAY) 
0

这可能不是正是你需要的,但它可以帮助:

select a.Product_Name, 
d.Company_Name, 
to_char(Order_Date, 'YYYY') as OrderYear, 
sum(case to_char(c.Order_Date, 'Q') when '1' 
    then b.Unit_Price*b.Quantity*(1-b.Discount) else 0 end) "Qtr 1", 
sum(case to_char(c.Order_Date, 'Q') when '2' 
    then b.Unit_Price*b.Quantity*(1-b.Discount) else 0 end) "Qtr 2", 
sum(case to_char(c.Order_Date, 'Q') when '3' 
    then b.Unit_Price*b.Quantity*(1-b.Discount) else 0 end) "Qtr 3", 
sum(case to_char(c.Order_Date, 'Q') when '4' 
    then b.Unit_Price*b.Quantity*(1-b.Discount) else 0 end) "Qtr 4" 
from Products a 
.... 

而且,看看这里的,你可能需要什么很好的例子: http://docs.oracle.com/html/B13915_04/appendix.htm#BEHJBJDE