首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在MySql中通过Sql创建试用平衡

在MySql中通过Sql创建试用平衡
EN

Stack Overflow用户
提问于 2014-02-13 10:49:18
回答 1查看 4.8K关注 0票数 1

我对Sql很陌生,需要一些指导才能通过MySql中的Sql查询来创建一个尝试性的平衡。考虑以下情况:

两张表:

  • Accounts
  • Transactions

Accounts 表字段详细信息:

  • AccNo (PK)(varchar) (5)
  • AccName (varchar)(50)
  • AccOpBal (double)

Transactions 表字段详细信息:

  • TransID (int) (自动增长) (PK)
  • AccNo (varchar) (5)
  • TransDt (DateTime)
  • TransDebit (Double)
  • TransCredit (Double)

现在,我需要一个基于transDt日期范围的SQL查询(例如,1月14日至2014年1月31日),该查询将返回:

AccNo

AccOpBal

TransDebit (每月交易总额,即2014年1月至1月)

TransCredit (每月交易总额,即2014年1月至1月)

TransDebit (交易之和,即2013年7月1日至2014年1月31日或YTD)

TransCredit (交易之和,即2013年7月1日至2014年1月31日或YTD)

并不一定每个AccNo都有开放余额(AccOpBal),同样,也不需要每个AccNo都有事务(TransDebitTransCredit)。但是,如果一个AccNo有,它应该在查询中。

添加的试件更新图片

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-13 11:47:19

您可以通过对两个查询的联合进行选择,其中一个是到目前为止的月份,另一个是到目前为止的年度数据。

代码语言:javascript
复制
select accno, accopbal, sum(mtd_d), sum(mtd_c), sum(ytd_d),sum(ytd_c)
from 
(   select ao.accno
         , ao.accOpBal
         , 0 as mtd_d
         , 0 as mtd_c
         , 0 as ytd_d
         , 0 as ytd_c
    from accounts ao
    left outer join transactions tn on tn.accno = ao.accno
    where tn.accno is null
    union
    select tm.accno
         , a.accOpBal
         , sum(tm.transdebit) as mtd_d
         , sum(tm.transcredit) as mtd_c
         , 0 as ytd_d
         , 0 as ytd_c
    from accounts a
    right outer join transactions tm on tm.accno = a.accno
    where tm.transdt between '2014-01-01' and '2014-01-31'
    group by a.accno, a.accopbal
    union 
    select ty.accno
         , a.accOpBal
         , 0
         , 0
         , sum(ty.transdebit)
         , sum(ty.transcredit)
    from accounts a
    right outer join transactions ty on ty.accno = a.accno
    and ty.transdt between '2013-07-01' and  '2014-01-31'
    group by a.accno, a.accopbal
) alltxn
group by accno, accopbal

下面是一个带有小测试集的木琴

下面是测试集:

代码语言:javascript
复制
-- january
insert into transactions values (1, 'alfki', '2014-01-01', 1,3); 
insert into transactions values (1, 'alfki', '2014-01-02', 1,3); 
insert into transactions values (1, 'alfki', '2014-01-03', 1,3); 

-- last year
insert into transactions values (1, 'alfki', '2013-09-01', 5,2);

-- txn without acc
insert into transactions values (1, 'noexi', '2014-01-03', 4,2); 


-- acc with txn
INSERT INTO Accounts values ( 'alfki', 'alfred', 4);
-- acc without txn
INSERT INTO Accounts values ( 'lefto', 'lefto', 6);

具有以下查询结果:

代码语言:javascript
复制
ACCNO | ACCOPBAL |SUM(MTD_D)|SUM(MTD_C)|SUM(YTD_D)|SUM(YTD_C)
------+----------+----------+----------+----------+-----------
alfki |  4       |      3   |     9    |    8     |   11
lefto |  6       |      0   |     0    |    0     |    0
noexi | (null)   |      4   |     2    |    4     |    2
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21752009

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档