qq_23379659
2018-08-31 02:04
采纳率: 50%
浏览 530

ORACLE数据库统计问题!

绿色为正常业务数据,下面数据是现在统计出来得结果。
入库多统计了一次,这是不行得 不然统计总数得时候也会多统计。
如果把出库合并 出库时间又没办法处理。
如何让入库不多统计 出库也不用合并?

  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

5条回答 默认 最新

  • hhgang_11 2018-08-31 03:13
    已采纳

    --运行结果
    图片说明

    已采纳该答案
    评论
    解决 无用
    打赏 举报
  • qq_23379659 2018-08-31 02:05

    图片说明

    评论
    解决 无用
    打赏 举报
  • 这种情况建议你 入库和出库分开用两张表记录,这样的可读性更强,也方便观察数据;如果不考虑用两张表,建议你再加一列记录类型type(1是入库 2是出库)这样区分开,在查数据的时候加上这个条件就行了。

    评论
    解决 无用
    打赏 举报
  • hhgang_11 2018-08-31 03:10

    --以下语句在Navicat Premium中执行成功,不同的工具请看情况修改语法
    --建立入库表,id列看情况可以去掉
    CREATE TABLE "t_test_tmp_r" (
    "rdate" DATE NULL ,
    "rnum" NUMBER(12,2) NULL ,
    "id" NUMBER(12) NULL
    );
    ALTER TABLE "t_test_tmp_r" ADD UNIQUE ("id");
    --插入入库数据
    INSERT INTO "t_test_tmp_r" VALUES (TO_DATE('2018-06-06 10:57:13', 'YYYY-MM-DD HH24:MI:SS'), '20', '0');
    INSERT INTO "t_test_tmp_r" VALUES (TO_DATE('2018-07-02 10:38:27', 'YYYY-MM-DD HH24:MI:SS'), '50', '1');
    INSERT INTO "t_test_tmp_r" VALUES (TO_DATE('2018-07-19 10:38:52', 'YYYY-MM-DD HH24:MI:SS'), '220', '2');
    INSERT INTO "t_test_tmp_r" VALUES (TO_DATE('2018-07-23 00:00:00', 'YYYY-MM-DD HH24:MI:SS'), '130', '3');

    --建立出库表
    CREATE TABLE "t_test_tmp_c" (
    "cdate" DATE NULL ,
    "cnum" NUMBER(12,2) NULL ,
    "id" NUMBER(20) NULL
    );
    --插入出库数据
    INSERT INTO "JENKINS"."t_test_tmp_c" VALUES (TO_DATE('2018-07-10 10:39:59', 'YYYY-MM-DD HH24:MI:SS'), '30', '1');
    INSERT INTO "JENKINS"."t_test_tmp_c" VALUES (TO_DATE('2018-07-27 10:40:55', 'YYYY-MM-DD HH24:MI:SS'), '70', '2');
    INSERT INTO "JENKINS"."t_test_tmp_c" VALUES (TO_DATE('2018-08-16 10:41:10', 'YYYY-MM-DD HH24:MI:SS'), '200', '3');
    INSERT INTO "JENKINS"."t_test_tmp_c" VALUES (TO_DATE('2018-08-22 10:41:23', 'YYYY-MM-DD HH24:MI:SS'), '100', '4');

    --以下为查询方法
    --入库表t_test_tmp_r列:rdate入库时间,rnum入库数量
    --出库表t_test_tmp_c列:cdate出库时间,cnum出库数量
    --TR表示入库表t_test_tmp_r,TC表示出库表t_test_tmp_c
    with TR
    AS
    (select sum("rnum") AS 入库 ,"TO_CHAR"("rdate", 'yyyy-mm') AS 月份 from "t_test_tmp_r" GROUP BY "TO_CHAR"("rdate", 'yyyy-mm'))
    ,
    TC
    AS
    (select sum("cnum") AS 出库 ,"TO_CHAR"("cdate", 'yyyy-mm') AS 月份 from "t_test_tmp_c" GROUP BY "TO_CHAR"("cdate", 'yyyy-mm'))

    SELECT TR.入库 AS 入库,TC."出库" AS 出库,TR."月份" FROM
    TR FULL JOIN TC
    ON TR.月份=TC.月份 ORDER BY 月份 ASC

    评论
    解决 无用
    打赏 举报
  • hhgang_11 2018-08-31 03:23

    --上个查询出库没有月份,不符合,修改一下,表和数据不变
    with TR
    AS
    (select sum("rnum") AS 入库 ,"TO_CHAR"("rdate", 'yyyy-mm') AS 月份 from "t_test_tmp_r" GROUP BY "TO_CHAR"("rdate", 'yyyy-mm'))
    ,
    TC
    AS
    (select sum("cnum") AS 出库 ,"TO_CHAR"("cdate", 'yyyy-mm') AS 月份 from "t_test_tmp_c" GROUP BY "TO_CHAR"("cdate", 'yyyy-mm'))

    SELECT TR.入库 AS 入库,TC."出库" AS 出库,TR."月份" AS 月份 FROM
    TR LEFT JOIN TC
    ON TR.月份=TC.月份-- ORDER BY 月份 asc
    UNION
    SELECT NULL AS 入库 ,TC."出库" AS 出库, TC."月份" AS 月份
    FROM TC
    LEFT JOIN TR ON TC.月份=TR.月份
    WHERE NOT EXISTS
    (
    SELECT 1 FROM TR
    WHERE TR."月份"=TC."月份"
    )

    --运行结果
    图片说明

    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题