码迷,mamicode.com
首页 > 数据库 > 详细

一段SQL

时间:2016-01-12 21:05:48      阅读:200      评论:0      收藏:0      [点我收藏+]

标签:

如何将会计分录流水合并成会计分录,环境oracle 11g,代码如下:

表:

CREATE TABLE "DEMO_VCH" 
("SET_NO" VARCHAR2(45 BYTE), 
"SET_ID" NUMBER, 
"AP_CODE" VARCHAR2(24 BYTE), 
"AP_DIRECTION" VARCHAR2(1 BYTE), 
"CUR_CODE" VARCHAR2(3 BYTE), 
"TX_AMT" NUMBER(24,4)
) ;

COMMENT ON COLUMN DEMO_VCH.SET_NO is 会计分录套号; 
COMMENT ON COLUMN DEMO_VCH.SET_ID is 会计分录序号; 
COMMENT ON COLUMN DEMO_VCH.AP_CODE is 科目码; 
COMMENT ON COLUMN DEMO_VCH.AP_DIRECTION is 接待方向(D:借;C:贷); 
COMMENT ON COLUMN DEMO_VCH.CUR_CODE is 币别; 
COMMENT ON COLUMN DEMO_VCH.TX_AMT is 金额; 

查询:

WITH
    VCH AS
    (
        SELECT
            T.*,
            SUM(
            CASE
                WHEN AP_DIRECTION=D
                AND AP_D2!       =D
                THEN 1
                ELSE 0
            END)OVER(PARTITION BY SET_NO ORDER BY SET_ID) RN --分段求和
        FROM
            (
                SELECT
                    T.*,
                    LAG(AP_DIRECTION,1,X)OVER(PARTITION BY SET_NO ORDER BY SET_ID) AP_D2 --上一行的值
                FROM
                    DEMO_VCH T
            )
            T
    )
    ,
    D AS
    (
        SELECT * FROM VCH WHERE AP_DIRECTION=D
    )
    ,
    C AS
    (
        SELECT * FROM VCH WHERE AP_DIRECTION=C
    )
SELECT
    D.SET_NO,
    D.RN AS SET_ID,
    D.AP_CODE      AS D_APCODE,
    D.AP_DIRECTION AS D_DIRECTION,
    D.CUR_CODE     AS D_CUR,
    D.TX_AMT       AS D_AMT,
    C.AP_CODE      AS C_APCODE,
    C.AP_DIRECTION AS C_DIRECTION,
    C.CUR_CODE     AS C_CUR,
    C.TX_AMT       AS C_AMT
FROM
    D
FULL JOIN C
ON
    D.SET_NO=C.SET_NO
AND D.RN    =C.RN;

数据:

技术分享
SET DEFINE OFF;
Insert into DEMO_VCH (SET_NO,SET_ID,AP_CODE,AP_DIRECTION,CUR_CODE,TX_AMT) values (100001,3,M001,C,CNY,118802.5);
Insert into DEMO_VCH (SET_NO,SET_ID,AP_CODE,AP_DIRECTION,CUR_CODE,TX_AMT) values (100001,2,M002,D,CNY,-118802.5);
Insert into DEMO_VCH (SET_NO,SET_ID,AP_CODE,AP_DIRECTION,CUR_CODE,TX_AMT) values (100001,0,U001,D,CNY,-118802.5);
Insert into DEMO_VCH (SET_NO,SET_ID,AP_CODE,AP_DIRECTION,CUR_CODE,TX_AMT) values (100001,1,U002,C,CNY,118802.5);
Insert into DEMO_VCH (SET_NO,SET_ID,AP_CODE,AP_DIRECTION,CUR_CODE,TX_AMT) values (100001,8,P001,C,CNY,95.04);
Insert into DEMO_VCH (SET_NO,SET_ID,AP_CODE,AP_DIRECTION,CUR_CODE,TX_AMT) values (100001,6,M002,C,CNY,118707.46);
Insert into DEMO_VCH (SET_NO,SET_ID,AP_CODE,AP_DIRECTION,CUR_CODE,TX_AMT) values (100001,4,M001,D,CNY,-118802.5);
Insert into DEMO_VCH (SET_NO,SET_ID,AP_CODE,AP_DIRECTION,CUR_CODE,TX_AMT) values (100002,1,U002,C,CNY,39500);
Insert into DEMO_VCH (SET_NO,SET_ID,AP_CODE,AP_DIRECTION,CUR_CODE,TX_AMT) values (100002,9,P002,C,CNY,40);
Insert into DEMO_VCH (SET_NO,SET_ID,AP_CODE,AP_DIRECTION,CUR_CODE,TX_AMT) values (100002,0,U001,D,CNY,-39500);
Insert into DEMO_VCH (SET_NO,SET_ID,AP_CODE,AP_DIRECTION,CUR_CODE,TX_AMT) values (100002,6,M002,C,CNY,39389.07);
Insert into DEMO_VCH (SET_NO,SET_ID,AP_CODE,AP_DIRECTION,CUR_CODE,TX_AMT) values (100002,4,M001,D,CNY,-39479.07);
Insert into DEMO_VCH (SET_NO,SET_ID,AP_CODE,AP_DIRECTION,CUR_CODE,TX_AMT) values (100002,3,M001,C,CNY,39479.07);
Insert into DEMO_VCH (SET_NO,SET_ID,AP_CODE,AP_DIRECTION,CUR_CODE,TX_AMT) values (100002,8,P001,C,CNY,50);
Insert into DEMO_VCH (SET_NO,SET_ID,AP_CODE,AP_DIRECTION,CUR_CODE,TX_AMT) values (100002,2,M002,D,CNY,-39479.07);
Insert into DEMO_VCH (SET_NO,SET_ID,AP_CODE,AP_DIRECTION,CUR_CODE,TX_AMT) values (100003,10,U002,C,USD,87192.6);
Insert into DEMO_VCH (SET_NO,SET_ID,AP_CODE,AP_DIRECTION,CUR_CODE,TX_AMT) values (100003,9,U001,D,USD,-87192.6);
Insert into DEMO_VCH (SET_NO,SET_ID,AP_CODE,AP_DIRECTION,CUR_CODE,TX_AMT) values (100003,4,M002,D,USD,-46.47);
Insert into DEMO_VCH (SET_NO,SET_ID,AP_CODE,AP_DIRECTION,CUR_CODE,TX_AMT) values (100003,8,P003,C,USD,4.91);
Insert into DEMO_VCH (SET_NO,SET_ID,AP_CODE,AP_DIRECTION,CUR_CODE,TX_AMT) values (100003,7,X001,D,USD,-4.91);
Insert into DEMO_VCH (SET_NO,SET_ID,AP_CODE,AP_DIRECTION,CUR_CODE,TX_AMT) values (100003,1,M001,C,USD,87146.13);
Insert into DEMO_VCH (SET_NO,SET_ID,AP_CODE,AP_DIRECTION,CUR_CODE,TX_AMT) values (100003,2,M001,D,USD,-87146.13);
Insert into DEMO_VCH (SET_NO,SET_ID,AP_CODE,AP_DIRECTION,CUR_CODE,TX_AMT) values (100003,0,M002,D,USD,-87146.13);
Insert into DEMO_VCH (SET_NO,SET_ID,AP_CODE,AP_DIRECTION,CUR_CODE,TX_AMT) values (100003,6,Y001,C,USD,87192.6);
Insert into DEMO_VCH (SET_NO,SET_ID,AP_CODE,AP_DIRECTION,CUR_CODE,TX_AMT) values (100004,4,M002,D,USD,-46.47);
Insert into DEMO_VCH (SET_NO,SET_ID,AP_CODE,AP_DIRECTION,CUR_CODE,TX_AMT) values (100004,2,M001,D,USD,-87519.03);
Insert into DEMO_VCH (SET_NO,SET_ID,AP_CODE,AP_DIRECTION,CUR_CODE,TX_AMT) values (100004,1,M001,C,USD,87519.03);
Insert into DEMO_VCH (SET_NO,SET_ID,AP_CODE,AP_DIRECTION,CUR_CODE,TX_AMT) values (100004,0,M002,D,USD,-87519.03);
Insert into DEMO_VCH (SET_NO,SET_ID,AP_CODE,AP_DIRECTION,CUR_CODE,TX_AMT) values (100004,10,U002,C,USD,87565.5);
Insert into DEMO_VCH (SET_NO,SET_ID,AP_CODE,AP_DIRECTION,CUR_CODE,TX_AMT) values (100004,9,U001,D,USD,-87565.5);
Insert into DEMO_VCH (SET_NO,SET_ID,AP_CODE,AP_DIRECTION,CUR_CODE,TX_AMT) values (100004,8,P003,C,USD,4.93);
Insert into DEMO_VCH (SET_NO,SET_ID,AP_CODE,AP_DIRECTION,CUR_CODE,TX_AMT) values (100004,7,X001,D,USD,-4.93);
Insert into DEMO_VCH (SET_NO,SET_ID,AP_CODE,AP_DIRECTION,CUR_CODE,TX_AMT) values (100004,6,Y001,C,USD,87565.5);
Insert into DEMO_VCH (SET_NO,SET_ID,AP_CODE,AP_DIRECTION,CUR_CODE,TX_AMT) values (100005,6,Y001,C,USD,86684.4);
Insert into DEMO_VCH (SET_NO,SET_ID,AP_CODE,AP_DIRECTION,CUR_CODE,TX_AMT) values (100005,1,M001,C,USD,86637.93);
Insert into DEMO_VCH (SET_NO,SET_ID,AP_CODE,AP_DIRECTION,CUR_CODE,TX_AMT) values (100005,4,M002,D,USD,-46.47);
Insert into DEMO_VCH (SET_NO,SET_ID,AP_CODE,AP_DIRECTION,CUR_CODE,TX_AMT) values (100005,0,M002,D,USD,-86637.93);
Insert into DEMO_VCH (SET_NO,SET_ID,AP_CODE,AP_DIRECTION,CUR_CODE,TX_AMT) values (100005,10,U002,C,USD,86684.4);
Insert into DEMO_VCH (SET_NO,SET_ID,AP_CODE,AP_DIRECTION,CUR_CODE,TX_AMT) values (100005,8,P003,C,USD,4.88);
Insert into DEMO_VCH (SET_NO,SET_ID,AP_CODE,AP_DIRECTION,CUR_CODE,TX_AMT) values (100005,7,X001,D,USD,-4.88);
Insert into DEMO_VCH (SET_NO,SET_ID,AP_CODE,AP_DIRECTION,CUR_CODE,TX_AMT) values (100005,2,M001,D,USD,-86637.93);
Insert into DEMO_VCH (SET_NO,SET_ID,AP_CODE,AP_DIRECTION,CUR_CODE,TX_AMT) values (100005,9,U001,D,USD,-86684.4);
Insert into DEMO_VCH (SET_NO,SET_ID,AP_CODE,AP_DIRECTION,CUR_CODE,TX_AMT) values (100006,1,M001,C,USD,42823.4);
Insert into DEMO_VCH (SET_NO,SET_ID,AP_CODE,AP_DIRECTION,CUR_CODE,TX_AMT) values (100006,4,M002,D,USD,-202);
Insert into DEMO_VCH (SET_NO,SET_ID,AP_CODE,AP_DIRECTION,CUR_CODE,TX_AMT) values (100006,10,U002,C,USD,43025.4);
Insert into DEMO_VCH (SET_NO,SET_ID,AP_CODE,AP_DIRECTION,CUR_CODE,TX_AMT) values (100006,9,U001,D,USD,-43025.4);
Insert into DEMO_VCH (SET_NO,SET_ID,AP_CODE,AP_DIRECTION,CUR_CODE,TX_AMT) values (100006,0,M002,D,USD,-42823.4);
Insert into DEMO_VCH (SET_NO,SET_ID,AP_CODE,AP_DIRECTION,CUR_CODE,TX_AMT) values (100006,2,M001,D,USD,-42823.4);
Insert into DEMO_VCH (SET_NO,SET_ID,AP_CODE,AP_DIRECTION,CUR_CODE,TX_AMT) values (100006,8,P003,C,USD,2.44);
Insert into DEMO_VCH (SET_NO,SET_ID,AP_CODE,AP_DIRECTION,CUR_CODE,TX_AMT) values (100006,6,Y001,C,USD,43025.4);
Insert into DEMO_VCH (SET_NO,SET_ID,AP_CODE,AP_DIRECTION,CUR_CODE,TX_AMT) values (100006,7,X001,D,USD,-2.44);
Insert into DEMO_VCH (SET_NO,SET_ID,AP_CODE,AP_DIRECTION,CUR_CODE,TX_AMT) values (100007,1,U004,C,CNY,60000);
Insert into DEMO_VCH (SET_NO,SET_ID,AP_CODE,AP_DIRECTION,CUR_CODE,TX_AMT) values (100007,3,M002,D,CNY,-199.33);
Insert into DEMO_VCH (SET_NO,SET_ID,AP_CODE,AP_DIRECTION,CUR_CODE,TX_AMT) values (100007,5,P004,C,CNY,199.33);
Insert into DEMO_VCH (SET_NO,SET_ID,AP_CODE,AP_DIRECTION,CUR_CODE,TX_AMT) values (100007,0,U003,D,CNY,-60000);
Insert into DEMO_VCH (SET_NO,SET_ID,AP_CODE,AP_DIRECTION,CUR_CODE,TX_AMT) values (100008,2,M002,C,CNY,60000);
Insert into DEMO_VCH (SET_NO,SET_ID,AP_CODE,AP_DIRECTION,CUR_CODE,TX_AMT) values (100008,1,M002,D,CNY,-60000);
commit;
View Code

效果:

 

一段SQL

标签:

原文地址:http://www.cnblogs.com/ola2010/p/5125435.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!