WHILE цикл в SQL - PullRequest
       17

WHILE цикл в SQL

2 голосов
/ 07 мая 2009

У меня есть две таблицы: авуары и транзакции

Данные о владениях выглядят так:

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'.

Не уверен, как это сделать, не делая 2-й цикл.

Помощь

Ответы [ 2 ]

6 голосов
/ 07 мая 2009

Вы пробовали присоединиться? Как:

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
0 голосов
/ 07 мая 2009

Используйте предложение GROUP BY для получения сводной информации, и если вы обрабатываете любые другие столбцы сложным образом, вы можете использовать пользовательскую функцию для этих процессов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...