![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Регистрация: 05.06.2010
Сообщений: 3
|
![]()
доброе время суток форумчане!
нужна ваша помощь в написании апдейта SQL . вот скрипт формирования таблицы: create table #info ( PlayerNumber nvarchar(30), [Days] int, Capital money, PrincipalAmount money, ContractAmount money, PaymentNumber int ) insert into #info select '2',31,0,0,5000,1 insert into #info select '2',30,0,0,5000,2 insert into #info select '2',29,120,0,5000,3 insert into #info select '2',30,50,0,5000,4 insert into #info select '2',31,70,0,5000,5 insert into #info select '2',30,200,0,5000,6 insert into #info select '7',31,0,0,5000,1 insert into #info select '7',30,0,0,5000,2 insert into #info select '7',29,120,0,5000,3 insert into #info select '7',30,50,0,5000,4 insert into #info select '7',31,70,0,5000,5 insert into #info select '7',30,200,0,5000,6 select * from #info теперь собственно описание проблемы: значение поля PrincipalAmount должно быть следующим : в том случае когда PaymentNumber=1 тогда PrincipalAmount=ContractAmount-Capital . во всех последующих случаях формула подсчёта такова : предыдущее значение PrincipalAmount-Capital(текущее значение) ...... тоесть на примере моей таблицы PlayerNumber=2,PaymentNumber=4 ....в этом случае значение PrincipalAmount должно быть: (select PrincipalAmount from #info where PlayerNumber=2 and PaymentNumber=3) - (select Capital from #info where PlayerNumber=2 and PaymentNumber=4) .... логика в общем такова.... вопрос в том как написать update чтобы все значения поля PrincipalAmount обновились таким образом.....(количество различных PlayerNumber может быть больше 100). всем заранее спасибо за помощь. |
![]() |
![]() |
![]() |
#2 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
![]()
В предположении, что нумерация в PaymentNumber отдельна для каждого значения PlayerNumber и без пропущенных номеров. Разбил на два. Можно и одним с конструкцией CASE WHEN, без отладки не стал рисовать
Код:
Хотя еще подумав, так не получится, нужно цикл организовывать с использованием DECLARE CURSOR и т.д.
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Последний раз редактировалось Аватар; 18.12.2011 в 13:15. |
![]() |
![]() |
![]() |
#3 | |
Регистрация: 05.06.2010
Сообщений: 3
|
![]() Цитата:
к сожалению этот метод не подходит,он не отнимает от предыдущего значения Principal ![]() нумерация в PaymentNumber отдельная и последовательная(без пропущенных номеров ) для каждого игрока .... |
|
![]() |
![]() |
![]() |
#4 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
![]()
Попробуйте с курсором, если не наделал ошибок
Код:
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Последний раз редактировалось Аватар; 18.12.2011 в 13:50. |
![]() |
![]() |
![]() |
#5 | |
Регистрация: 05.06.2010
Сообщений: 3
|
![]() Цитата:
![]() подправил " WHERE T.PaymentNumber=@PlayerNumber-1 " на " WHERE T.PaymentNumber=@PaymentNumber-1 " и всё работает как часы ![]() ![]() |
|
![]() |
![]() |
![]() |
Опции темы | Поиск в этой теме |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
UPDATE sql | hunter03 | Помощь студентам | 5 | 14.12.2011 18:00 |
SQL UPDATE | MAZADA | БД в Delphi | 0 | 13.07.2011 13:38 |
Сложный запрос в SQL | A-Lex-Is | SQL, базы данных | 1 | 10.08.2010 23:19 |
сложный sql запрос | kate158 | БД в Delphi | 0 | 18.09.2008 11:38 |
Сложный SQL-запрос | ole777 | БД в Delphi | 1 | 08.05.2007 20:56 |