一段SQL

如何将会计分录流水合并成会计分录,环境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;

效果:

时间: 2024-10-13 23:00:57

一段SQL的相关文章

撸一段 SQL ? 还是撸一段代码?

记得刚入公司带我的研发哥们能写一手漂亮的 SQL,搜索准确.执行快.效率高. 配合Web项目中的查询展示数据的需求,基本是分分钟完成任务. 那段时间基本是仰视的态度,每天都去讨教一点手写 SQL 的要点,翻看一些 SQL 优化调整的技巧. 随着积累和实践,SQL 水平提高的很快,同时也写了很多,有兴趣的可以看看:http://www.cnblogs.com/ 随后经历了几个项目的打磨,不断去调整公司的框架,发现项目中大段 SQL 出现的概率越来越小. 我不得不停下脚步,开始反思和总结出现这种现象

如何通过JS调用某段SQL语句

如何通过JS调用某段SQL语句,这样的需求在报表.数据平台开发中很常见.以报表平台FineReport开发为例,例如在点击某个按钮之后,来判断一下数据库条数,再决定下一步操作.那这在后台如何实现呢? 解决思路 实现这个功能,首先需要了解Finereport内置的公式,SQL函数,这个肯能大家都懂,就不做介绍了. 调用FineRepor的内置公式:FR.remoteEvaluate("具体公式"),返回值为:这个具体公式的结果. 例如:var a = FR.remoteEvaluate(

评《撸一段 SQL ? 还是撸一段代码? 》

最近看到一篇博客<撸一段 SQL ? 还是撸一段代码?>,文章举例说明了一个连表查询使用程序code来写可读性可维护性更好,但是回帖意见不一致,我想作者在理论层面没有做出更好的论述,而我今天才回帖结果发现不能回帖了,于是单独写此文随记. 木桶定律 连表查询的确应该尽量避免,虽然普通情况下一条连表查询的SQL效率比两个for循环效率更高,但是我们应该知道大量依靠复杂SQL查询的应用程序,数据库很容易成为瓶颈,但应用程序所在的服务器却比较空闲,那么此时应用程序表现的结果就是等待数据库返回查询结果,

悠然乱弹:一段SQL引发的性能危机及其背后隐藏的设计缺陷

有个同学,说是系统中出现性能问题了,说是让我帮助诊断一下.本来是不想花这时间的,结果耐不住对方的死缠乱打,只要答应帮看看. 故事发生的背景是,在文件上传的时候,有时间会有人上传了文件,但是最后没有使用上传的文件,这样就会产生一些垃圾文件. 原来软件作者就想写一个后台定时任务程序,来清除这些垃圾文件? 由于作者坚定的不让我发她的SQL语句(这个我也理解,这么丑陋的SQL),所以这里就不发源代码了,发伪代码. void deleteMissLinkFile{ List fileList=getFil

《开源框架那些事儿27》悠然乱弹:一段SQL引发的性能危机及其背后隐藏的设计缺

有个同学,说是系统中出现性能问题了,说是让我帮助诊断一下.本来是不想花这时间的,结果耐不住对方的死缠乱打,只要答应帮看看.  故事发生的背景是,在文件上传的时候,有时间会有人上传了文件,但是最后没有使用上传的文件,这样就会产生一些垃圾文件. 原来软件作者就想写一个后台定时任务程序,来清除这些垃圾文件? 由于作者坚定的不让我发她的SQL语句(这个我也理解,这么丑陋的SQL),所以这里就不发源代码了,发伪代码. 123456789101112131415 void deleteMissLinkFil

C#先执行一段sql等后台操作后再提示是否后续操作confrim

应用场景:例如选择一个单据号打击打印后先去数据库检索是否有打打印过,如果有则提示,已打印,是否再打 如果没有则不提示,直接进行打印. 实现原理:多做一个隐藏按钮去实现打印功能,页面上的打印按钮则进行数据库的后台操作,跟据取出的数据 可以在后台直接调用打印,或用脚本调用前台confirm 代码Demo: 后台: using System; using System.Collections.Generic; using System.Linq; using System.Web; using Sys

一段SQL代码的压缩:从974行到96行,十倍压缩

涉及到数据库拆分,需要将相关表的JOIN SQL剥离. 剥离过程中,发现了这么个SQL XML.整个SQL 974 行,分为6个函数.读起来费劲无比. 1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybati

一段sql的优化

优化前代码 select * ,ROW_NUMBER() OVER(order by WrongCount desc) as rowId from(select Quba_IDint,Quba_Number , (select top 1 Sqre_AddDateTime from tbStudentStudyQuestionRecords where Sqre_QubaId=Quba_IDint and Sqre_StudentId=200 and sqre_AnswerJudge='wron

一段SQL代码

begin transaction set quoted_identifier on set arithabort on set numeric_roundabort off set concat_null_yields_null on set ansi_nulls on set ansi_padding on set ansi_warnnings on commit begin transaction go alter table test add rowguid uniqueidentifi