zoukankan      html  css  js  c++  java
  • SQL script 會計記賬 DebitCredit Bookkeeping

    ---會計記賬 Debit-Credit Bookkeeping
    
    CREATE TABLE 
            #geovindu 
    (        
            Account VARCHAR(20), 	--賬號
            [Date] DATETIME, 	--時間
            Debit DECIMAL(9,2), 	--借入
            Credit DECIMAL(9,2) 	--貸出
    ) 
    GO
    INSERT INTO #geovindu VALUES ('10139', '2007-08-31', 2025.91, 0.0) 
    INSERT INTO #geovindu VALUES ('10139', '2007-08-31', 0.0, 3620.11) 
    INSERT INTO #geovindu VALUES ('10139', '2007-09-30', 4631.52, 0.0) 
    INSERT INTO #geovindu VALUES ('10139', '2007-09-30', 0.0, 11336.71) 
    INSERT INTO #geovindu VALUES ('10139', '2007-09-30', 0.0, 14.8801) 
    INSERT INTO #geovindu VALUES ('12211', '2007-08-31', 1352.76, 0.0) 
    INSERT INTO #geovindu VALUES ('12211', '2007-08-31', 0.0, 3872.5) 
      
    /*
    塗聚文 締友計算機信息技術有限公司 
    Geovin Du
    */ 
    ---查詢
    
    SELECT 
            account AS '賬目編目號', 
            [date] AS '日期', 
            SUM(Debit) AS '借', 
            - SUM(Credit) AS '貸', 
            (SELECT ISNULL(SUM(m2.Debit),0) - ISNULL(SUM(m2.Credit),0) FROM #geovindu m2 WHERE m1.account = m2.account AND m2.[date] <= m1.[date] AND  
      
    CASE WHEN m2.debit <> 0 THEN 0 ELSE 1 END <= CASE WHEN m1.debit <> 0 THEN 0 ELSE 1 END 
      
    ) AS '合計' --Balance 
    FROM 
            #geovindu m1 
    GROUP BY 
            account, 
            [date], 
            CASE WHEN debit <> 0 THEN 0 ELSE 1 END 
    ORDER BY 
            account, 
            [date], 
            CASE WHEN debit <> 0 THEN 0 ELSE 1 END 
      
      
    DROP TABLE #geovindu 
    
    DROP TABLE #GeTbl
    GO
    create table #GeTbl (Tid VARCHAR(20), Ttype varchar(50), Tamt float) ;
    GO
    Drop table #GeType
    Create table #GeType (TType varchar(50) primary key, GroupType tinyint)
    
    insert into #GeType (TType,GroupType) values ('Cash',1)
    insert into #GeType (TType,GroupType) values ('Expense',1)
    insert into #GeType (TType,GroupType) values ('Credit',2)
    insert into #GeType (TType,GroupType) values ('Debit',2)
    insert into #GeType (TType,GroupType) values ('Petty Cash',3)
    insert into #GeType (TType,GroupType) values ('Petty Expense',3)
    
    
    insert into #GeTbl  select  
    '101','Cash',-100
    UNION ALL SELECT 
    '101','Expense',-200
    UNION ALL SELECT 
    '101','Credit',-100
    UNION ALL SELECT 
    '101','Debit',-100 UNION ALL SELECT 
    '101','Expense',-150 UNION ALL SELECT 
    '102','Credit',-50 UNION ALL SELECT 
    '102','Debit',-100 UNION ALL SELECT 
    '102','Petty expense',100 UNION ALL SELECT 
    '102','Cash',200 UNION ALL SELECT 
    '102','Expense',-200 UNION ALL SELECT 
    '102','Petty cash',100 UNION ALL SELECT 
    '103','Cash',200 UNION ALL SELECT 
    '103','Expense',-100 UNION ALL SELECT 
    '104','Cash',200 UNION ALL SELECT 
    '104','Expense',-200
    
    ---
    select * from (
    select * from #GeTbl
     where Ttype in ('Cash','Expense')
       and Tid in (select Tid from 
                    (select Tid, SUM(Tamt) DrCrTotal
                       from #GeTbl
                      where Ttype in ('Cash','Expense')
                      group by Tid
                       having SUM(Tamt) <> 0) v)
    union all
    select * from #GeTbl
     where Ttype in ('Debit','Credit')
       and Tid in (select Tid from 
                    (select Tid, SUM(case when TType = 'Credit' then Tamt * -1 else Tamt end) DrCrTotal
                       from #GeTbl
                      where Ttype in ('Debit','Credit')
                      group by Tid
                       having SUM(case when TType = 'Credit' then Tamt * -1 else Tamt end) <> 0) v)
    union all
    select * from #GeTbl
     where Ttype not in ('Debit','Credit', 'Cash','Expense')
     ) x
    order by TID                      
    
    
    ---
    select g.Tid, g.Ttype, g.Tamt 
    from #GeTbl g
    inner join #GeType gt
     on g.Ttype = gt.TType
    inner join  (
    select a.Tid, b.GroupType, Sum(a.Tamt) DrCrTotal
       from #GeTbl a
       inner join #GeType b
         on a.Ttype = b.TType                                          
      group by a.Tid, b.GroupType
       having SUM(a.Tamt) <> 0) v
    on g.Tid = v.Tid
    and gt.GroupType = v.GroupType   
    order by g.Tid
    

    /**********
    塗聚文 Geovin Du
    締友計算機信息技術有限公司
    ***********/
    
    create table tblAccount
    (
     A_ID VARCHAR(20), 
     A_Type VARCHAR(20),
     A_Amount MONEY
    )
    GO
    --
    insert into tblAccount (A_ID,A_Type, A_Amount)
    select '1','Credit',500
    union all select '1','Credit',100
    union all select '1','Debit',50
    union all select '2','Debit',150
    union all select '2','Credit',100
    go
    
    --
    select  a.SumCr as Credit ,
            b.SumDr as Debit ,
            a.SumCr - b.SumDr as Balance
    from    ( select    sum(A_Amount) as SumCr
              from      tblAccount
              where     A_ID = 1
                        and A_Type = 'Credit'
            ) a ,
            ( select    sum(A_Amount) as SumDr
              from      tblAccount
              where     A_ID = 1
                        and A_Type = 'Debit'
            ) b
    --
    select  a.A_ID as [ID] ,
            a.SumCr as Credit ,
            b.SumDr as Debit ,
            a.SumCr - b.SumDr as Balance
    from    ( select    A_ID ,
                        sum(A_Amount) as SumCr
              from      tblAccount
              where     A_Type = 'Credit'
              group by  A_ID
            ) a
            inner join ( select A_ID ,
                                sum(A_Amount) as SumDr
                         from   tblAccount
                         where  A_Type = 'Debit'
                         group by A_ID
                       ) b on a.A_ID = b.A_ID
    
    go
    
    drop table tblAccount
    go
    ---
    
    哲学管理(学)人生, 文学艺术生活, 自动(计算机学)物理(学)工作, 生物(学)化学逆境, 历史(学)测绘(学)时间, 经济(学)数学金钱(理财), 心理(学)医学情绪, 诗词美容情感, 美学建筑(学)家园, 解构建构(分析)整合学习, 智商情商(IQ、EQ)运筹(学)成功.---Geovin Du(涂聚文)
  • 相关阅读:
    一本通1269 有限背包
    python3 threading.Lock() 多线程锁的使用
    Sqlite3错误:Recursive use of cursors not allowed 的解决方案
    linux 常用命令
    90%的人说Python程序慢,5大神招让你的代码像赛车一样跑起来
    python3 使用flask连接数据库出现“ModuleNotFoundError: No module named 'MySQLdb'”
    Navicat Premium12远程连接MySQL数据库
    pymysql pymysql.err.OperationalError 1045 Access denied最简单解决办法
    CentOS7 安装MySQL8修改密码
    CentOS7 升级Openssl的办法
  • 原文地址:https://www.cnblogs.com/geovindu/p/2114731.html
Copyright © 2011-2022 走看看