Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Как можно вывести нарастающим итогом сумму?  [new]
remotd
Member

Откуда: Moscow
Сообщений: 279
Доброе время, возникла такая проблема
в таблице записи

02.02.2004 2000
07.02.2004 1000
03.02.2004 1500


Возникает проблема показать накапливаемую сумму в зависимости от даты.
т.е. должно быть так
02.02.2004 2000 2000
03.02.2004 1500 3500 (+1500)
07.02.2003 1000 4500 (+1000)
Как я понимаю, исходную таблицу в MSSql я отсортировать по дате не могу, и как перемещаться по записям с update нарарастающей суммы? Каким способом это сделать? Записи могут быть дополнены, причем дата последней записи м.б. ранее , чем предидущая.
Спасибо.
10 фев 04, 12:32    [528839]     Ответить | Цитировать Сообщить модератору
 Re: Как можно вывести нарастающим итогом сумму?  [new]
Berg
Member

Откуда: Кр-ск
Сообщений: 3480
FAQ?
10 фев 04, 12:41    [528859]     Ответить | Цитировать Сообщить модератору
 Re: Как можно вывести нарастающим итогом сумму?  [new]
a1ex
Member

Откуда: .ua
Сообщений: 369
не самый лучший способ, но все же ...
select a.f1, a.f2, (select sum(f2) from MyTable where f1 = a.f1) as sumf2 from MyTable a
10 фев 04, 12:59    [528907]     Ответить | Цитировать Сообщить модератору
 Re: Как можно вывести нарастающим итогом сумму?  [new]
Вячеслав Викторович
Member

Откуда: г. Киев
Сообщений: 3
SET DATEFORMAT DMY

SELECT T.DateDoc,
ISNULL( (SELECT SUM(Amount) FROM tbl WHERE DateDoc <= T.DateDoc), 0 )

FROM tbl T
ORDER BY T.DateDoc

Пример для уникальной даты, иначе надо учитывать ключ
10 фев 04, 13:09    [528934]     Ответить | Цитировать Сообщить модератору
 Re: Как можно вывести нарастающим итогом сумму?  [new]
a1ex
Member

Откуда: .ua
Сообщений: 369
да, не совсем нарастающий итог получился :(((
согласен с Вячеслав Викторович о необходимости ключа
10 фев 04, 13:46    [529008]     Ответить | Цитировать Сообщить модератору
 Re: Как можно вывести нарастающим итогом сумму?  [new]
Crip
Member

Откуда:
Сообщений: 2490
declare @t table (a datetime,b int)
insert @t select '20040202', 2000
insert @t select '20040207', 1000
insert @t select '20040203', 1500

select t1.a , sum(t2.b)
from @t t1 inner join @t t2
on t2.a<=t1.a
group by t1.a
10 фев 04, 13:57    [529037]     Ответить | Цитировать Сообщить модератору
 Re: Как можно вывести нарастающим итогом сумму?  [new]
remotd
Member

Откуда: Moscow
Сообщений: 279
Спасибо всем, сделал так
SELECT date_op, summe,
(SELECT SUM(summe)
FROM oper1
WHERE date_op <= a.date_op) AS sumf2
FROM oper1 a

но Вячеслав Викторович прав с уникальностью даты.
Как это можно усовершенствовать по ключу.
Т.е.
две записи с одинаковыми датами
номер_операции дата сумма итоговая_сумма
.... итог.сумма до даты 10
11 10.02.2004 2000 3010
12 10.02.2004 1000 3010

Сеичас запрос выдают общую сумму на все операции в данной дате,
как можно еще учесть и ключ.
10 фев 04, 14:02    [529050]     Ответить | Цитировать Сообщить модератору
 Re: Как можно вывести нарастающим итогом сумму?  [new]
Вячеслав Викторович
Member

Откуда: г. Киев
Сообщений: 3
Спасибо всем, сделал так
SELECT date_op, summe,
(SELECT SUM(summe)
FROM oper1
WHERE date_op <= a.date_op) AS sumf2
FROM oper1 a
Как это можно усовершенствовать по ключу


SELECT date_op, summe,
(SELECT SUM(summe)
FROM oper1
WHERE (date_op <= a.date_op) AND (IDOper1 <= a.IDOper1) ) AS sumf2
FROM oper1 a
ORDER BY a.date_op, a.IDOper1

Где IDOper1 - Уникальный ключ(числовой) с логикой нового:
SELECT isnull(MAX(IDOper1),0) + 1
или IDENTITY
10 фев 04, 16:24    [529480]     Ответить | Цитировать Сообщить модератору
 Re: Как можно вывести нарастающим итогом сумму?  [new]
remotd
Member

Откуда: Moscow
Сообщений: 279
Спасибо всем - поличилось так.
SELECT date_op, summe,
(SELECT SUM(summe)
FROM oper1
WHERE date_op <= a.date_op) and nop < a.nop AS sumf2
FROM oper1 a
10 фев 04, 16:29    [529491]     Ответить | Цитировать Сообщить модератору
 Re: Как можно вывести нарастающим итогом сумму?  [new]
a1ex
Member

Откуда: .ua
Сообщений: 369
рецепт от ВВ более правильный, IMHO.
можно еще почитать в BOL: Summarizing Data Using ROLLUP
10 фев 04, 17:10    [529591]     Ответить | Цитировать Сообщить модератору
 Re: Как можно вывести нарастающим итогом сумму?  [new]
remotd
Member

Откуда: Moscow
Сообщений: 279
Сделал так
SELECT date_op, summe,(SELECT SUM(summe) FROM oper1
WHERE (date_op <= a.date_op) AND (nop <= a.nop)) AS sumf2
FROM oper1 a ORDER BY date_op

пример из таблицы
номер_операции дата сумма итог_сумма
1 11.12.2003 12.3 12.3
2 19.12.2003 1900 1912.3
3 22.12.2003 1.22 1913.52
4 26.12.2003 2322 2334.3
5 27.12.2003 10000 12334.3
6 27.12.2003 2000.25 16235.77

Суммирующее поле ит.суммы в 4-записи неправильно, а в 6 - ОК, в чем м.б. причина?
10 фев 04, 19:28    [529819]     Ответить | Цитировать Сообщить модератору
 Re: Как можно вывести нарастающим итогом сумму?  [new]
remotd
Member

Откуда: Moscow
Сообщений: 279
Прошу прощения, в предидущем сообщении неправильно указал номера операций (ключ).

SELECT date_op, summe,(SELECT SUM(summe) FROM oper1
WHERE (date_op <= a.date_op) AND (nop <= a.nop)) AS sumf2
FROM oper1 a ORDER BY date_op

пример из таблицы
номер_операции дата сумма итог_сумма
1 11.12.2003 12.3 12.3
4 19.12.2003 1900 1912.3
5 22.12.2003 1.22 1913.52
2 26.12.2003 2322 2334.3
3 27.12.2003 10000 12334.3
6 27.12.2003 2000.25 16235.77

Суммирующее поле ит.суммы в записях неправильно, а в 6(итоговое) - ОК, в чем м.б. причина? Т.е. непонятно суммирует по номерам операций и датам.
11 фев 04, 00:49    [529992]     Ответить | Цитировать Сообщить модератору
 Re: Как можно вывести нарастающим итогом сумму?  [new]
Aleksey777
Member

Откуда: Novosibirsk
Сообщений: 227
SELECT date_op, summe,(SELECT SUM(summe) FROM oper1 

WHERE (date_op < a.date_op) or (nop <= a.nop and date_op=a.date_op)) AS sumf2
FROM oper1 a
ORDER BY date_op
11 фев 04, 06:20    [530032]     Ответить | Цитировать Сообщить модератору
 Re: Как можно вывести нарастающим итогом сумму?  [new]
remotd
Member

Откуда: Moscow
Сообщений: 279
Спасибо всем за помощь, сделал итоговое по Aleksey777 , все оказалось просто.
11 фев 04, 10:02    [530202]     Ответить | Цитировать Сообщить модератору
 Re: Как можно вывести нарастающим итогом сумму?  [new]
remotd
Member

Откуда: Moscow
Сообщений: 279
Еще один вопрос, связанный с данной темой.
Суммирование проходит,я писал в сообщение, но вот проблема - мне нужно к итоговой сумме первой записи (в выводе) приплюсовать некую константу,
соответственно у остальных записей в итог.сумме тоже будет плюс константа.
Пример
номер_опер. дата сумма итог_сумма
1 11.12.2003 12 12
4 19.12.2003 100 112
5 22.12.2003 1 113
2 26.12.2003 2 115
3 27.12.2003 3 118
6 27.12.2003 5 123
пробовал так
SELECT date_op, summe, @const+(SELECT SUM(summe) FROM oper1
WHERE (date_op < a.date_op) or (nop <= a.nop and date_op=a.date_op)) AS sumf2 FROM oper1 a ORDER BY date_op
- неправильно
Необходимо еще присоединить итог за предидущий период (до 11.12.2003) - константу. Или как в операцию с более ранней датой и с меньшим номером
(ключом) присоединить const.
Спасибо.
11 фев 04, 14:22    [530988]     Ответить | Цитировать Сообщить модератору
 Re: Как можно вывести нарастающим итогом сумму?  [new]
Алексей2003
Member

Откуда: Москва
Сообщений: 5645
а пащиму так неправильно?


для спящего время бодрствования равносильно сну
11 фев 04, 14:25    [531001]     Ответить | Цитировать Сообщить модератору
 Re: Как можно вывести нарастающим итогом сумму?  [new]
remotd
Member

Откуда: Moscow
Сообщений: 279
а пащиму так неправильно? Проверил - оказалось все ОК. Спасибо.
11 фев 04, 14:36    [531036]     Ответить | Цитировать Сообщить модератору
 Re: Как можно вывести нарастающим итогом сумму?  [new]
Glory
Member

Откуда:
Сообщений: 104760
Проверил - оказалось все ОК. Спасибо.
А до этого вы как результат получали ? На счетах что-ли ? :)
11 фев 04, 14:46    [531061]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Как можно вывести нарастающим итогом сумму?  [new]
Combo
Member

Откуда:
Сообщений: 66
Select Date, Sum(Prixod) prixod
FROM table
Where (Date <= "'+DateToStr(DateTimePicker2.Date) (нарастающий итог)
у меня такая же проблема как у вас. помагите мне как в моем случае решат эту проблему, очень прошу.
20 авг 09, 08:24    [7559357]     Ответить | Цитировать Сообщить модератору
 Re: Как можно вывести нарастающим итогом сумму?  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
Combo
у меня такая же проблема как у вас
У вас - это у кого?
У автора?
Так вряд ли он с 2004 года до сих пор за своей темой следит...

И какая вообще проблема?
FAQ непонятен что ли?
20 авг 09, 09:51    [7559721]     Ответить | Цитировать Сообщить модератору
 Re: Как можно вывести нарастающим итогом сумму?  [new]
Combo
Member

Откуда:
Сообщений: 66
И какая вообще проблема?

нарастающий итог по DateTimePicker
20 авг 09, 10:16    [7559864]     Ответить | Цитировать Сообщить модератору
 Re: Как можно вывести нарастающим итогом сумму?  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
Combo
нарастающий итог по DateTimePicker
Что такое DateTimePicker ?
Элемент управления в окне на экране клиентского компьютера?
А причем тут MS SQL Server?
Откуда он знает про какое-то там клиентское окно?
20 авг 09, 10:27    [7559942]     Ответить | Цитировать Сообщить модератору
 Re: Как можно вывести нарастающим итогом сумму?  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
Combo
И какая вообще проблема?

нарастающий итог по DateTimePicker


Не смешивайте в кучу - теплое и мягкое. Способ задания пользователем условий отбора на клиенте и формирование запроса на сервер. Откройте для себя параметры в запросах. Но это тема для форума по дельфе...
20 авг 09, 10:37    [7560028]     Ответить | Цитировать Сообщить модератору
 Re: Как можно вывести нарастающим итогом сумму?  [new]
Combo
Member

Откуда:
Сообщений: 66
DBGrid1.DataSource := DataModule1.DataSource10;
with DataModule1.Query4.SQL do
begin
DataModule1.Query4.Close; Clear;
Add('SELECT Date, Prixod , (Select SUM(Prixod) FROM bank.dbf" Where d.Date<b.Date ) as itoq');
Add('FROM bank.dbf" b ');
Add('WHERE (b.Date < "'+DateToStr(DateTimePicker2.Date)+'")');
if sCheckBox1.Checked then Add('AND (Направление = "'+ComboBox2.Text+'")');
if sCheckBox2.Checked then Add('AND (Счет = "'+ComboBox1.Text+'")');
Add('Group By Date, Prixod');
нарастающий итог по дате одинаковые и отрисателные число - 6,61287231251Е1223
где моя ощибка
20 авг 09, 15:12    [7562301]     Ответить | Цитировать Сообщить модератору
 Re: Как можно вывести нарастающим итогом сумму?  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
Combo
где моя ощибка


Вы задаете вопрос не в том форуме!!!
20 авг 09, 15:24    [7562400]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить