1.问题描述:在公司增加报表的总计中,有两种方式增加总计。 一种方法就是在查询的数据之后增加一列(上次博客已写);另外一种方法就是在查询的数据之后增加一行总计。但是在你查询的数据中会出现日期转化错误,这是因为Oracle的decode内置函数返回值不是日期类型。这时需要转化字符格式。
1.日期错误SQL和图
SELECT DECODE (GROUPING(成品料号)+GROUPING(成品规格)+GROUPING(工单)+GROUPING(入库数量)+GROUPING(入库单号)+GROUPING(箱号)+GROUPING(操作者)+GROUPING(入库时间),8,'合计',成品料号)成品料号,
DECODE (GROUPING(成品料号)+GROUPING(成品规格)+GROUPING(工单)+GROUPING(入库数量)+GROUPING(入库单号)+GROUPING(箱号)+GROUPING(操作者)+GROUPING(入库时间),8,'-',成品规格)成品规格,
DECODE (GROUPING(成品料号)+GROUPING(成品规格)+GROUPING(工单)+GROUPING(入库数量)+GROUPING(入库单号)+GROUPING(箱号)+GROUPING(操作者)+GROUPING(入库时间),8,'-',工单)工单,
DECODE (GROUPING(成品料号)+GROUPING(成品规格)+GROUPING(工单)+GROUPING(入库数量)+GROUPING(入库单号)+GROUPING(箱号)+GROUPING(操作者)+GROUPING(入库时间),8,'-',入库数量)入库数量,
DECODE (GROUPING(成品料号)+GROUPING(成品规格)+GROUPING(工单)+GROUPING(入库数量)+GROUPING(入库单号)+GROUPING(箱号)+GROUPING(操作者)+GROUPING(入库时间),8,'-',箱号)箱号,
DECODE (GROUPING(成品料号)+GROUPING(成品规格)+GROUPING(工单)+GROUPING(入库数量)+GROUPING(入库单号)+GROUPING(箱号)+GROUPING(操作者)+GROUPING(入库时间),8,'-',操作者)操作者,
DECODE (GROUPING(成品料号)+GROUPING(成品规格)+GROUPING(工单)+GROUPING(入库数量)+GROUPING(入库单号)+GROUPING(箱号)+GROUPING(操作者)+GROUPING(入库时间),8,'-',入库时间,)入库时间,
SUM(入库数量) FROM
(SELECT B.PART_NO AS 成品料号,B.SPEC1 AS 成品规格 ,A.WORK_ORDER AS 工单 ,A.QTY AS 入库数量,A.BILL_NO AS 入库单号,A.CONTAINER_NO AS 箱号,C.EMP_NAME AS 操作者,A.UPDATE_TIME AS 入库时间
FROM SAJET.WMS_PRODUCTS_IN A LEFT JOIN SAJET.SYS_PART B ON A.PART_ID=B.PART_ID
LEFT JOIN SAJET.SYS_EMP C ON A.UPDATE_USERID=C.EMP_ID
WHERE 1=1
AND A.BILL_NO IN(SELECT LIST_NO FROM SAJET.TBLK3_BILL_RECORD WHERE ORDER_TYPE IN('1','2') AND ISOK='1')
AND A.WORK_ORDER='WORK014084'
--[AND B.PART_NO=:PARAM1]
--[AND A.WORK_ORDER=:PARAM2]
--[AND A.BILL_NO=:PARAM3]
--[AND A.UPDATE_TIME BETWEEN:PARAM4]
ORDER BY A.UPDATE_TIME DESC) GROUP BY ROLLUP((成品料号,成品规格,工单,入库数量,入库单号,箱号,操作者,入库时间))
图:
2.正确的SQL和图
SELECT DECODE (GROUPING(成品料号)+GROUPING(成品规格)+GROUPING(工单)+GROUPING(入库数量)+GROUPING(入库单号)+GROUPING(箱号)+GROUPING(操作者)+GROUPING(TO_CHAR(入库时间,'YYYY-MM-DD HH24:MI:SS')),8,'合计',成品料号)成品料号,
DECODE (GROUPING(成品料号)+GROUPING(成品规格)+GROUPING(工单)+GROUPING(入库数量)+GROUPING(入库单号)+GROUPING(箱号)+GROUPING(操作者)+GROUPING(TO_CHAR(入库时间,'YYYY-MM-DD HH24:MI:SS')),8,'-',成品规格)成品规格,
DECODE (GROUPING(成品料号)+GROUPING(成品规格)+GROUPING(工单)+GROUPING(入库数量)+GROUPING(入库单号)+GROUPING(箱号)+GROUPING(操作者)+GROUPING(TO_CHAR(入库时间,'YYYY-MM-DD HH24:MI:SS')),8,'-',工单)工单,
DECODE (GROUPING(成品料号)+GROUPING(成品规格)+GROUPING(工单)+GROUPING(入库数量)+GROUPING(入库单号)+GROUPING(箱号)+GROUPING(操作者)+GROUPING(TO_CHAR(入库时间,'YYYY-MM-DD HH24:MI:SS')),8,'-',入库数量)入库数量,
DECODE (GROUPING(成品料号)+GROUPING(成品规格)+GROUPING(工单)+GROUPING(入库数量)+GROUPING(入库单号)+GROUPING(箱号)+GROUPING(操作者)+GROUPING(TO_CHAR(入库时间,'YYYY-MM-DD HH24:MI:SS')),8,'-',箱号)箱号,
DECODE (GROUPING(成品料号)+GROUPING(成品规格)+GROUPING(工单)+GROUPING(入库数量)+GROUPING(入库单号)+GROUPING(箱号)+GROUPING(操作者)+GROUPING(TO_CHAR(入库时间,'YYYY-MM-DD HH24:MI:SS')),8,'-',操作者)操作者,
DECODE (GROUPING(成品料号)+GROUPING(成品规格)+GROUPING(工单)+GROUPING(入库数量)+GROUPING(入库单号)+GROUPING(箱号)+GROUPING(操作者)+GROUPING(TO_CHAR(入库时间,'YYYY-MM-DD HH24:MI:SS')),8,'-',TO_CHAR(入库时间,'YYYY-MM-DD HH24:MI:SS'))入库时间,
SUM(入库数量) FROM
(SELECT B.PART_NO AS 成品料号,B.SPEC1 AS 成品规格 ,A.WORK_ORDER AS 工单 ,A.QTY AS 入库数量,A.BILL_NO AS 入库单号,A.CONTAINER_NO AS 箱号,C.EMP_NAME AS 操作者,A.UPDATE_TIME AS 入库时间
FROM SAJET.WMS_PRODUCTS_IN A LEFT JOIN SAJET.SYS_PART B ON A.PART_ID=B.PART_ID
LEFT JOIN SAJET.SYS_EMP C ON A.UPDATE_USERID=C.EMP_ID
WHERE 1=1
AND A.BILL_NO IN(SELECT LIST_NO FROM SAJET.TBLK3_BILL_RECORD WHERE ORDER_TYPE IN('1','2') AND ISOK='1')
AND A.WORK_ORDER='WORK014084'
--[AND B.PART_NO=:PARAM1]
--[AND A.WORK_ORDER=:PARAM2]
--[AND A.BILL_NO=:PARAM3]
--[AND A.UPDATE_TIME BETWEEN:PARAM4]
ORDER BY A.UPDATE_TIME DESC) GROUP BY ROLLUP((成品料号,成品规格,工单,入库数量,入库单号,箱号,操作者,TO_CHAR(入库时间,'YYYY-MM-DD HH24:MI:SS')))
图: