要在我的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;