2014-03-19 7 views
0

У меня есть таблица Главной книги в базе данных (SQL Server 2005), со столбцами (ID, Insertion_Date, Invoice_No, Debit, Credit и Balance).Обновление нескольких строк с разными значениями в одном запросе

Когда пользователь добавляет некоторые записи, ему будет дано заполнить счет-фактуру нет. и сумму (Дебет), так что баланс будет автоматически добавлен как Balance = Balance - Amount. Во всяком случае, после нескольких строк для одного и того же счета, пользователь решил отредактировать сумму за предыдущую строку. После редактирования суммы баланс той же строки и других строк должен измениться автоматически. (As: отредактированная строка будет принимать новую сумму, например: Balance = Balance - newamount, а остальные строки будут брать новый баланс и суб. С их текущей суммой).

Пример: Таблица GL

ID Date  Invoice_No Debit Credit Balance 
--------------------------------------------------------- 
1 19/3/2014 123456  0  400  400 
2 19/3/2014 123456  100   0  300 
3 20/3/2014 123456  50   0  250 
4 21/3/2014 123456  100   0  150 
5 22/3/2014 123456  50   0  100 

После редактирования строки с ID 2 и делая замену на дебетовой колонке (вместо 100, что делает его 50) только, остальные строки будут осуществляться таким образом, результат должен выглядят так.

ID Date  Invoice_No Debit Credit Balance 
--------------------------------------------------------- 
1 19/3/2014 123456  0  400  400 
2 19/3/2014 123456  50   0  350 
3 20/3/2014 123456  50   0  300 
4 21/3/2014 123456  100   0  200 
5 22/3/2014 123456  50   0  150 

Любая идея, как я могу управлять этим с помощью одного запроса. Является новым в SQL и нуждаюсь в помощи. Пожалуйста, запросите дополнительную информацию. если нужно.

+0

Вы так же отмечаете это как sql ... – Bogdan

+0

рассмотрите возможность использования триггера для этого. Когда вы обновляете какую-то сумму, триггер обновляет каждую другую строку – fnightangel

+0

возможный дубликат [Рассчитать текущее количество в SqlServer] (http://stackoverflow.com/questions/860966/calculate-a-running-total-in-sqlserver) –

ответ

7

Я бы настоятельно советовал вам НЕ поддерживать «текущее общее количество» в качестве поля в таблице транзакций - рассчитать его в виде, хранимой процедуре или в приложении-потребителе. В противном случае изменение одной записи будет каскадироваться, чтобы потенциально каждая другая запись в таблице.

+0

Отличный совет. OP также может рассмотреть вопрос о том, чтобы сделать «Дебет» и «Кредит» в один столбец, содержащий соответствующие положительные/отрицательные значения. Это может быть немного от темы, хотя ... – DMason

+0

На самом деле, я делаю это в хранимой процедуре, но сейчас я остановился на этом. – OJazem

+0

Что делать? Расчет текущего баланса? Ваш вопрос указывает, что это поле в физической таблице. –

Смежные вопросы