首页 文章

ORACLE中子查询的列上的SUM

提问于
浏览
1

我试图从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 回答

  • 1

    您的查询将更简单地写为:

    select count(*),
           sum(case when status in ('CR', 'IR') then 1 else 0 end) as CRIR, 
           sum(case when status in ('R', 'T') then 1 else 0 end) as RT, 
           sum(case when status in ('S') then 1 else 0 end) as Succes
    from data_string ds
    where ds.sent_dt_time >= date '2016-10-04' and
          ds.sent_dt_time < date '2016-10-08';
    

    笔记:

    • 您想要做的事情不需要两级聚合 .

    • 使用 case 而不是 decode() ,因为 case 是标准SQL . 合并诸如 in 之类的逻辑也更简单 .

    • Oracle支持 date 关键字,后面可以跟一个标准日期 .

    • 几乎完全相同的查询在SQL Server中工作(减去 date 关键字) .

  • 0

    只是为了你的错误 ORA-00904: ColumnName : invalid identifier

    如果在子查询中对“Tots”,“CRIR”,“RT”,“Succes”列使用带引号的别名,则需要在主查询中使用相同的引用别名 .

    引用的别名区分大小写 . 但是非引用别名不区分大小写 . Oracle将它们解释为大写 .

    它会工作:

    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')
    );
    

相关问题