2016-01-07 21 views
2

我正在開發一個Oracle中的小型項目。我需要獲得排名前三位的暢銷產品以及今年和四月 - 四月 - 六月,七月 - 九月,十月 - 十二月和一月 - 三月的每個季度的最佳銷售產品總金額。我已經找到了第一部分,我只需要幫助獲得每個產品的4季度總計。希望有人能幫助,謝謝Oracle季度SQL查詢前三名產品

這是迄今爲止使用的SQL命令:

select * from (
    select "FACTQUANTITY"."PRODUCTID" as "PRODUCTID", 
      "DIMPRODUCT"."PRODUCTNAME" as "PRODUCTNAME", 
      sum(FACTQUANTITY.QUANTITY) as "QUANTITY" 
    from  "FACTQUANTITY" "FACTQUANTITY", 
      "DIMPRODUCT" "DIMPRODUCT" 
    where "DIMPRODUCT"."PRODUCTID"="FACTQUANTITY"."PRODUCTID" 
    group by FACTQUANTITY.PRODUCTID, 
      DIMPRODUCT.PRODUCTNAME 
    order by sum(FACTQUANTITY.QUANTITY) desc 
) 
WHERE ROWNUM <= 3; 

enter image description here

回答

2

你可以從這裏開始:隨後

select  
    trunc(fact_table.date_column,'Q') as quarter, 
    "FACTQUANTITY"."PRODUCTID" , 
    "DIMPRODUCT"."PRODUCTNAME", 
    sum(FACTQUANTITY.QUANTITY) as "QUANTITY" 
    from "FACTQUANTITY" JOIN "DIMPRODUCT" 
     ON "DIMPRODUCT"."PRODUCTID"="FACTQUANTITY"."PRODUCTID" 
    group by 
     FACTQUANTITY.PRODUCTID, DIMPRODUCT.PRODUCTNAME, trunc(fact_table.date_column,'Q') 

    ; 

,您可以:

with a as (<previous query>) 
select * 
from (
    select 
     quarter, 
     productid, 
     productname, 
     quantity, 
     row_number() over (partition by quarter order by quantity desc) rnk 
    from a 
) 
where rnk <= 3; 
0
SELECT * 
FROM (
    SELECT *, 
     ROW_NUMBER() OVER (PARTITION BY quarter 
          ORDER BY quantity DESC, PRODUCTNAME ASC) AS rn 
    FROM (
    SELECT TRUNC(f.datetime, 'Q') AS quarter, 
      f.PRODUCTID, 
      d.PRODUCTNAME, 
      sum(f.QUANTITY) AS QUANTITY 
    FROM  FACTQUANTITY f 
      INNER JOIN 
      DIMPRODUCT d 
      ON (d.PRODUCTID = f.PRODUCTID) 
    GROUP BY TRUNC(f.datetime, 'Q'), 
      FACTQUANTITY.PRODUCTID, 
      DIMPRODUCT.PRODUCTNAME 
) 
) 
WHERE rn <= 3;