Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Списание денег , как сделать ?  [new]
Andrey1306
Member

Откуда: Киев
Сообщений: 2611
Есть такая таблица заказов. SummaBalans одна для PersonalAccountID. Нужно в отдельное поле вывести какую суму заказа (OrderSumma) можно будет оплатить , OrderNumeric это уникальный номер заказа он же и последовательность списания (то есть сначала списываем на меньший OrderNumeric )
CREATE TABLE #Order(
	PersonalAccountID [int] NOT NULL,
	OrderNumeric [int] NOT NULL,
	OrderSumma decimal(15,2),
	SummaBalans decimal(15,2)

) 

INSERT INTO #Order (PersonalAccountID,OrderNumeric,	OrderSumma,	SummaBalans)
     VALUES (1,120,150,500)
INSERT INTO #Order (PersonalAccountID,OrderNumeric,	OrderSumma,	SummaBalans)
     VALUES (1,121,100,500)
INSERT INTO #Order (PersonalAccountID,OrderNumeric,	OrderSumma,	SummaBalans)
     VALUES (1,122,150,500)
INSERT INTO #Order (PersonalAccountID,OrderNumeric,	OrderSumma,	SummaBalans)
     VALUES (1,123,50,500)
INSERT INTO #Order (PersonalAccountID,OrderNumeric,	OrderSumma,	SummaBalans)
     VALUES (1,124,00,500)
INSERT INTO #Order (PersonalAccountID,OrderNumeric,	OrderSumma,	SummaBalans)
     VALUES (1,125,330,500)
INSERT INTO #Order (PersonalAccountID,OrderNumeric,	OrderSumma,	SummaBalans)
     VALUES (2,220,100.00,-200)


SELECT * FROM #Order



Вот такой должен быть результат.
PersonalAccountID OrderNumeric OrderSumma SummaBalans OrderPaySumma;
1120150500150;
1121100350100;
1122150250150;
11235010050;
112405050;
112533050280;
2220100-2000;
25 янв 12, 19:05    [11971038]     Ответить | Цитировать Сообщить модератору
 Re: Списание денег , как сделать ?  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10233
Блог
SELECT PersonalAccountID
     , OrderNumeric
     , OrderSumma
     , SummaBalans - isnull ( s, 0 ) as SummBalans 
     , case when OrderSumma = 0.00 then SummaBalans - isnull ( s, 0 )
        when OrderSumma < SummaBalans - isnull ( s, 0 ) then OrderSumma
        else OrderSumma - ( SummaBalans - isnull ( s, 0 ) ) end as OrderPaySumma
FROM #Order t
cross apply ( select sum(OrderSumma) s from #Order where OrderNumeric < t.OrderNumeric ) t2
25 янв 12, 19:35    [11971261]     Ответить | Цитировать Сообщить модератору
 Re: Списание денег , как сделать ?  [new]
Andrey1306
Member

Откуда: Киев
Сообщений: 2611
Спасибо , я пробовал через рекурсии, не осилил. Но в этом запросе по второму PersonalAccountID не корректный подсчет
25 янв 12, 19:45    [11971344]     Ответить | Цитировать Сообщить модератору
 Re: Списание денег , как сделать ?  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10233
Блог
SELECT PersonalAccountID
     , OrderNumeric
     , OrderSumma
     , SummaBalans - isnull ( s, 0 ) as SummBalans 
     , case when OrderSumma = 0.00 then SummaBalans - isnull ( s, 0 )
        when SummaBalans - isnull ( s, 0 ) < 0 then 0
        when OrderSumma < SummaBalans - isnull ( s, 0 ) then OrderSumma
        else OrderSumma - ( SummaBalans - isnull ( s, 0 ) ) end as OrderPaySumma
FROM #Order t
cross apply ( select sum(OrderSumma) s from #Order 
                where PersonalAccountID = t.PersonalAccountID 
                  and OrderNumeric < t.OrderNumeric 
            ) t2
25 янв 12, 19:50    [11971390]     Ответить | Цитировать Сообщить модератору
 Re: Списание денег , как сделать ?  [new]
Andrey1306
Member

Откуда: Киев
Сообщений: 2611
Knyazev Alexey,

Спасибо огромное, попробую на реальные данные переложить
25 янв 12, 19:51    [11971402]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить