我试图从oracle数据库上给定日期之间的表格中获取总事务计数 . 我写了一个子查询来对唯一事务进行分组,当我尝试对子查询中的列求和时,我得到一个错误ORA-00904:ColumnName:invalid identifier . 我是oracle的新手但是这个曾经在sql server中为我工作 .
这是我的查询 .
select sum(Tots),sum(CRIR),sum(RT),sum(Succes) from(
select ds.LOAN_ID,ds.CUST_ID,TO_CHAR(ds.SENT_DT_TIME, 'YYYY-MM-DD') "Dates", count(*) "Tots",
SUM(DECODE (ds.STATUS, 'CR', 1,'IR',1,0)) "CRIR",
SUM(DECODE (ds.STATUS, 'R', 1,'T',1,0)) "RT",
SUM(DECODE (ds.STATUS, 'S', 1, 0)) "Succes"
FROM DATA_STRING ds
WHERE TRUNC(ds.SENT_DT_TIME) BETWEEN to_date('2016-10-04','yyyy-mm-dd') and to_date('2016-10-07','yyyy-mm-dd')
Group by ds.LOAN_ID,ds.CUST_ID,TO_CHAR(ds.SENT_DT_TIME, 'YYYY-MM-DD')
);
2 回答
您的查询将更简单地写为:
笔记:
您想要做的事情不需要两级聚合 .
使用
case
而不是decode()
,因为case
是标准SQL . 合并诸如in
之类的逻辑也更简单 .Oracle支持
date
关键字,后面可以跟一个标准日期 .几乎完全相同的查询在SQL Server中工作(减去
date
关键字) .只是为了你的错误
ORA-00904: ColumnName : invalid identifier
如果在子查询中对“Tots”,“CRIR”,“RT”,“Succes”列使用带引号的别名,则需要在主查询中使用相同的引用别名 .
引用的别名区分大小写 . 但是非引用别名不区分大小写 . Oracle将它们解释为大写 .
它会工作: