要在我的Sql server查询中再添加一列吗
我使用这个查询来获得一些结果要在我的Sql server查询中再添加一列吗,sql,sql-server,sql-server-2012,Sql,Sql Server,Sql Server 2012,我使用这个查询来获得一些结果 select t.accode,t.acname, sum(t.debit)as debit, sum(t.credit) as credit from transactions t inner join accounts a on a.code = t.accode where a.TypeCode = 5 and t.date between '2014-05-01' and '2014-05-15' group by t.accode,t.acname
select t.accode,t.acname, sum(t.debit)as debit, sum(t.credit) as credit from transactions t
inner join accounts a on a.code = t.accode
where a.TypeCode = 5 and t.date between '2014-05-01' and '2014-05-15'
group by t.accode,t.acname
我通过这个查询得到这个结果
accode acname debit credit
1 umer 200 300
现在我想在这个结果中添加一个previos balance列。这是一个示例查询
sum(debit)-sum(credit) as previousbalance from transaction where date < '2014-05-01'
谁能告诉我怎么做?我将非常感谢您。您只需将列添加到现有字段中,如下所示:
select t.accode,t.acname, sum(t.debit)as debit, sum(t.credit) as credit,
( sum(t.debit) - sum(t.credit) ) as previousbalance
from transactions t
inner join accounts a on a.code = t.accode
where a.TypeCode = 5 and t.date between '2014-05-01' and '2014-05-15'
group by t.accode,t.acname;
另一种方法是内部/嵌套查询:
select tab.*, (credit-debit) as previousbalance
from
(
select t.accode,t.acname, sum(t.debit)as debit, sum(t.credit) as credit from transactions t
inner join accounts a on a.code = t.accode
where a.TypeCode = 5 and t.date between '2014-05-01' and '2014-05-15'
group by t.accode,t.acname
) tab;
可以在SELECT语句中插入子查询,如下所示:
select t.accode,t.acname, sum(t.debit)as debit, sum(t.credit) as credit
, (SELECT sum(t2.debit) - sum(t2.credit) FROM transactions AS t2 INNER JOIN accounts AS a2 ON t2.accode = a2.code
WHERE a2.code = t.accode AND t2.date < '2014-05-01') as prevbalance
from transactions t
inner join accounts a on a.code = t.accode
where a.TypeCode = 5 and t.date between '2014-05-01' and '2014-05-15'
group by t.accode,t.acname
在该子查询中,您可能需要另一个分组,但对此不确定。我认为您需要在此处交叉应用
但是如果没有一些测试数据,我不能确定没有什么可以测试的,但是这应该是可行的。然而,是否有一个截止日期,你不想再回头看
select t.accode, t.acname,
sum( case when t.date < '2014-05-01' then t.debit - t.credit end ) as PrevBal,
sum( case when between '2014-05-01' and '2014-05-15' then t.debit end ) as Debit,
sum( case when between '2014-05-01' and '2014-05-15' then t.credit end ) as Credit
from transactions t
join accounts a
on a.code = t.accode
where a.TypeCode = 5
-- and t.date >= :CutoffDate
group by t.accode, t.acname;
这不会给出期望的结果,因为OP希望借方/贷方和以前的余额有不同的条件。我希望在该日期之前有以前的余额。请在评论时详细说明,我不知道你到底是什么意思。你有没有试过在子查询中添加t2.accode上的group by?干得好的人只需在子查询中更改a2.code=t.accode。这样我才能接受你的回答。
SELECT t.accode, t.acname, pb.previousbalance
, SUM(t.debit) as debit, SUM(t.credit) as credit
FROM transactions t
INNER JOIN accounts a on a.code = t.accode
CROSS APPLY (SELECT SUM(debit) - SUM(credit) as previousbalance
FROM transaction t1
WHERE date < '2014-05-01'
AND t.accode = t1.accode
GROUP BY t1.accode, t1.acname) pb
WHERE a.TypeCode = 5
AND t.date BETWEEN '2014-05-01' AND '2014-05-15'
GROUP BY t.accode, t.acname
select t.accode, t.acname,
sum( case when t.date < '2014-05-01' then t.debit - t.credit end ) as PrevBal,
sum( case when between '2014-05-01' and '2014-05-15' then t.debit end ) as Debit,
sum( case when between '2014-05-01' and '2014-05-15' then t.credit end ) as Credit
from transactions t
join accounts a
on a.code = t.accode
where a.TypeCode = 5
-- and t.date >= :CutoffDate
group by t.accode, t.acname;