2017-09-29 99 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