当我将数据从DB导出到客户端时,我正面临一个SQL问题
我的工作要求是:
select
datmvt as DATE_MVT,
(select TRUNC(datmvt,-4) from dual ) as exercice,
codpro as CODPRO,
SUM(qtemvt)-SUM(C01) as QT
from myTable
where codpro = 'XXX'
and datmvt BETWEEN YYYYMMDD and YYYYMMDD
GROUP BY datmvt, codpro
HAVING abs(SUM(qtemvt)-SUM(C01)) > 0
给我这个结果:
DATMVT exercice codpro QT
20190119 20190000 0828765332927 1
20190126 20190000 0828765332927 -1
20180117 20180000 0828765332927 -1
20180118 20180000 0828765332927 -1
20190122 20190000 0828765332927 1
在您提出之前,是的,日期以YYYYMMDD格式存储为整数值。 我的要求正在运作,但我希望有一些像:
exercice codpro QT
20190000 0828765332927 -1
20180000 0828765332927 -2
所以,我正试图通过exercice
订购,但甲骨文回应我:00904. 00000 - "%s: invalid identifier"
这是我的非工作 - 但需要的要求:
select
(select TRUNC(datmvt,-4) from dual ) as exercice,
codpro as CODPRO,
SUM(qtemvt)-SUM(C01) as QT
from myTable
where codpro = 'XXX'
and datmvt BETWEEN YYYYMMDD and YYYYMMDD
GROUP BY exercice, codpro
HAVING abs(SUM(qtemvt)-SUM(C01)) > 0
您只能引用GROUP BY
中数据集中存在的列,因此您还需要在那里重复计算,例如:
select
TRUNC(datmvt,-4) as exercice,
codpro as CODPRO,
SUM(qtemvt)-SUM(C01) as QT
from myTable
where codpro = 'XXX'
and datmvt BETWEEN YYYYMMDD and YYYYMMDD
GROUP BY TRUNC(datmvt,-4), codpro
HAVING abs(SUM(qtemvt)-SUM(C01)) > 0
我不知道你为什么在没有它的情况下使用子查询(select TRUNC(datmvt,-4) from dual)
作为日期。你可以从select中选择,但这种语法更简单,应该完成这项工作:
select trunc(datmvt,-4) exercice, codpro, sum(qtemvt)-sum(c01) qt
from mytable
where codpro = '0828765332927' and datmvt between 20150101 and 20191231
group by trunc(datmvt, -4), codpro
having sum(qtemvt) - sum(c01) <> 0