我对Sql很陌生,需要一些指导才能通过MySql中的Sql查询来创建一个尝试性的平衡。考虑以下情况:
两张表:
AccountsTransactionsAccounts 表字段详细信息:
varchar) (5)varchar)(50)double)Transactions 表字段详细信息:
int) (自动增长) (PK)varchar) (5)DateTime)Double)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都有事务(TransDebit或TransCredit)。但是,如果一个AccNo有,它应该在查询中。
添加的试件更新图片

发布于 2014-02-13 11:47:19
您可以通过对两个查询的联合进行选择,其中一个是到目前为止的月份,另一个是到目前为止的年度数据。
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下面是一个带有小测试集的木琴
下面是测试集:
-- 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);具有以下查询结果:
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 | 2https://stackoverflow.com/questions/21752009
复制相似问题