oracle销售总查询

时间:2012-12-26 15:44:09

标签: sql oracle sum

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

我真的需要在这里快速解决,感谢提前的每一条评论

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)

2 个答案:

答案 0 :(得分:0)

这可能有助于成为您想要的......它为您提供每个月和每季度以及全年每年的总计。如果你想要一个特定的年份,我建议增加一个“凡提取(年日)= 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)

答案 1 :(得分: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

相关问题