2014-02-25 116 views
0

我打印出每個州的總銷售額,只要該月的銷售額超過6000美元即可。結果需要按月排序(降序)。我注意到我在同一個月得到了2個得克薩斯州的結果。所以告訴我的是,只是尋找超過6,000美元的個人銷售額,儘管我有一筆總額(so.total),我認爲這個總額會在本月訂購。不知道如何通過每個人每月以打破銷售如果order_date的字段日 - 月 - 年它(使用Oracle 10g)按月訂購總銷售額

輸入:

SELECT c.state "State",to_char(so.order_date, 'Month')"Month", sum(so.total)"Sales" 
FROM a_customer c 
JOIN a_sales_order so ON c.customer_id=so.customer_id 
GROUP BY c.state, so.order_date 
HAVING sum(so.total)>6000 
ORDER BY to_char(so.order_date, 'MM') desc 

輸出:

State Month  Sales 
----- --------- -------- 
TX September $8,400 
CA July  $8,377 
TX March  $7,700 
TX March  $8,540 
CA February $46,370 
MN February $6,400 
CA February $24,650 

回答

1

我認爲您的GROUP BYORDER BY子句中可能存在問題。

嘗試:

SELECT c.state AS "State", 
     to_char(so.order_date, 'Month') AS "Month", 
     sum(so.total) AS "Sales" 
    FROM a_customer c 
    JOIN a_sales_order so ON c.customer_id=so.customer_id 
GROUP BY c.state, 
     to_char(so.order_date, 'Month') 
HAVING sum(so.total)>6000 
ORDER BY to_date(to_char(so.order_date, 'Month'), 'Month') desc 

我沒有在我面前的工作實例,此刻嘗試,但你需要確保你是分組在相同的輸出您顯示,在原始示例中,您在完整的order_date上進行分組,但僅顯示月份部分。 在您的示例中的順序將按月的文本排序,而不是按實際的時間順序排列。

希望它有幫助。

+0

這工作,但我想更好地瞭解順序。您將order_date更改爲月份的char值,那麼您將char值更改爲以一個月爲單位的日期值? – Student

+1

實際上,您將ORDER_DATE截斷爲TO_CHAR中的月份部分,如果您只是這樣做了,那麼訂單將僅在月份字符串而不是月份值。因此,您必須再次TO_DATE才能獲得按時間順序排列的順序。 – Ollie