我有两个表:Holdings和Transactions
控股数据如下:
06/30/2009, A, 100 06/30/2009, B, 1200 06/30/2009, C, 100 06/30/2009, D, 100
交易数据如下:
A, 06/05/2009, 100 B, 06/02/2009, 400 B, 06/13/2009, 400 B, 06/28/2009, 400 C, 06/17/2009, 100 D, 06/30/2009, 100
我需要完成的是通过馆藏表并对单独存在的交易进行计算。
我能够将所有事务放入临时表并使用WHILE循环来处理它们。
declare @count int,
@loopcount int
declare @tblTransactions TABLE
(
ID int identity(1,1),
trtype varchar(10),
trdate datetime,
trvalue int
)
insert into @tblTransactions
select * from Transactions
select @count=@@rowcount
set @loopcount=1
WHILE @loopcount<=count
BEGIN
select * from @tblTransactions where ID=@loopcount
set @loopcount=@loopcount+1
END
这一切都非常好,但问题在于:如果同一个持有trtype
列有多个交易,我需要计算“trvalue
”的总计。
不确定如何在不进行第二次循环的情况下进行操作。
帮助?
答案 0 :(得分:6)
你试过加入吗?像:
select <yourcalculation>
from holdings h
left join transactions t on h.holdingid = t.holdingid
如果您只对交易的汇总感兴趣,则可以使用GROUP BY:
select h.name, sum(t.trvalue)
from holdings h
left join transactions t on h.holdingid = t.holdingid
group by h.holdingid
答案 1 :(得分:0)
使用GROUP BY子句获取摘要信息,如果您以复杂的方式处理任何其他列,则可以为这些进程使用用户定义的函数。