首页 > 解决方案 > 打印特定时期的 invoicenum 和总金额的总行

问题描述

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

在指定的时间段内打印所有发票。每场演出

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

SQL加

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

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

标签: oracleoracle11gsqlplus

解决方案


你得到的错误说未聚合的列应该是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>

尝试将您刚刚看到的内容应用于您的案例(家庭作业?)。此外,探索格式化 SQL*Plus 报告的其他方法。


推荐阅读