打印特定发票的发票总行和总金额

时间:2019-09-18 18:22:53

标签: oracle oracle11g sqlplus

输入参数:from日期和to日期

在指定的时间段内打印所有发票。对于每个节目

  • 发票编号
  • 发票日期和
  • 发票金额

打印总计行:该期间的发票数量和总金额

SQL加

select invoicenum, sum(invoiceamount) as "totalamount" from invoiceheader;

ERROR at line 1:
ORA-00937: not a single-group group function

1 个答案:

答案 0 :(得分:0)

您遇到的错误是,未聚合的列应该是group by子句的一部分,即

select invoicenum, sum(invoiceamount) as "totalamount" 
from invoiceheader
group by invoicenum;          --> this is what you are missing

但是,由于没有WHERE子句(应包含日期列),因此不能解决您的问题。


关于SQL * Plus,这是我认为您应该做的。

我没有您的表,所以我使用的是Scott的示例架构。

首先,按EMP列排序的所有hiredate表行:

SQL> select empno, ename, sal, hiredate from emp order by hiredate;

     EMPNO ENAME             SAL HIREDATE
---------- ---------- ---------- ----------
      7369 SMITH             800 1980-12-17
      7499 ALLEN            1600 1981-02-20
      7521 WARD             1250 1981-02-22
      7566 JONES            2975 1981-04-02
      7698 BLAKE            2850 1981-05-01
      7782 CLARK            2450 1981-06-09
      7844 TURNER           1500 1981-09-08
      7654 MARTIN           1250 1981-09-28
      7839 KING             5000 1981-11-17
      7900 JAMES             950 1981-12-03
      7902 FORD             3000 1981-12-03
      7934 MILLER           1300 1982-01-23
      7788 SCOTT            3000 1982-12-09
      7876 ADAMS            1100 1983-01-12

14 rows selected.

这是一个简单的查询,其中利用了where子句(但仍不会显示您要查找的内容):

SQL> select empno, ename, sal, hiredate from emp
  2  where hiredate between date '1981-04-01' and date '1981-12-31'
  3  order by hiredate;

     EMPNO ENAME             SAL HIREDATE
---------- ---------- ---------- ----------
      7566 JONES            2975 1981-04-02
      7698 BLAKE            2850 1981-05-01
      7782 CLARK            2450 1981-06-09
      7844 TURNER           1500 1981-09-08
      7654 MARTIN           1250 1981-09-28
      7839 KING             5000 1981-11-17
      7902 FORD             3000 1981-12-03
      7900 JAMES             950 1981-12-03

8 rows selected.

SQL> 

但是,如果使用SQL * Plus报告设置,则可能会得到结果:

SQL> select empno, ename, sal, hiredate from emp
  2  where hiredate between date '1981-04-01' and date '1981-12-31'
  3  order by hiredate;

     EMPNO ENAME             SAL HIREDATE
---------- ---------- ---------- ----------
      7566 JONES            2975 1981-04-02
      7698 BLAKE            2850 1981-05-01
      7782 CLARK            2450 1981-06-09
      7844 TURNER           1500 1981-09-08
      7654 MARTIN           1250 1981-09-28
      7839 KING             5000 1981-11-17
      7902 FORD             3000 1981-12-03
      7900 JAMES             950 1981-12-03
----------            ----------
         8
                           19975

8 rows selected.

SQL>

尝试将您刚刚看到的内容应用于案件(家庭作业?)。另外,探索Formatting SQL*Plus Reports的其他方式。