2017-09-29 146 views
-3

事務表按日期區分SQL甲骨文

No Date  Amount 
1 06-07-2017 1000 
2 06-07-2017 1500 
3 08-07-2017 2000 
4 09-07-2017 2000 
5 09-07-2017 2000 
6 09-07-2017 2000 

選擇和是否有可能實現這一結果與單個查詢(無查詢循環)

No Date  Total Amount 
1 06-07-2017  2500 
2 08-07-2017  2000 
3 09-07-2017  6000 
+1

是的,這是! (提示:'GROUP BY'和'SUM()'。) – jarlh

+0

事務表是否實際上有一個名爲'No'的列?你真的想在結果中使用「否」,但不是來自記錄中的那個? (這是唯一困難的部分,好吧,不是很難;你可以用'ROW_NUMBER'來爲你的結果行編號,如果你不需要'否'列,那麼確保你沒有在你想要的內容中顯示任何內容導致您的請求。) –

回答

1

您是否在尋找Group By

select Trunc("Date"), -- we have to put ".." since Date is a Keyword in Oracle 
      sum(Amount) as "Total Amount" 
     from MyTable 
    group by Trunc("Date") 
    order by Trunc("Date") 

編輯:似乎Date字段包含日期和時間,而時間部分應該是截斷 - Trunc - 聚集時(見註釋)

+0

該列別名的單引號 - Oracle會接受嗎? – jarlh

+0

@jarlh:對於拼寫錯誤,''Total Amount「'應該用雙引號確定 –

+0

不起作用,它不總結日期和總金額 – Angger

1

對於準確結果:

select row_number() over (order by date) as No, 
     date, sum(amount) as "Total Amount" 
from t 
group by date 
order by date; 

不是e:在Oracle中,date數據類型可以包含一個時間組件 - 這可能在輸出中不可見。如果是這樣,聚合不會達到您的預期。如果是這種情況,那麼:

select row_number() over (order by trunc(date)) as No, 
     trunc(date) as date, sum(amount) as "Total Amount" 
from t 
group by trunc(date) 
order by trunc(date); 
+0

這將無法正常工作。它會拋出錯誤'ORA-00979:不是GROUP BY表達式',因爲在Select中使用group by子句時不使用'rownum'。 – XING