|
|
|
Можно ли как получить выборку из таблицы с расчетом нарастающего итога
|
|||
|---|---|---|---|
|
#18+
Можно ли как получить выборку из таблицы с расчетом нарастающего итога: Например есть таблица с полем F1, хранящем некоторые денежные суммы Нужно получить выборку содержащую 2 поля : F1 и F2 , где в F2 - нарастающий итог по F1 ( F2(i)=F2(i-1)+F1(i-1) , F2(1)=F1(1)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2003, 09:45 |
|
||
|
Можно ли как получить выборку из таблицы с расчетом нарастающего итога
|
|||
|---|---|---|---|
|
#18+
В таблице есть поле или комбинация полей являющихся уникальным ключом? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2003, 09:57 |
|
||
|
Можно ли как получить выборку из таблицы с расчетом нарастающего итога
|
|||
|---|---|---|---|
|
#18+
Рекомендую провести поиск по "нарастающий итог" в форуме. Сам так нашел. Кстати есть где-то здесь прикольнейшая функция по этому поводу:) Geen ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2003, 09:58 |
|
||
|
Можно ли как получить выборку из таблицы с расчетом нарастающего итога
|
|||
|---|---|---|---|
|
#18+
имхо, запросом это сделать нельзя. Но нарастающий итог можно сделать в отчете впрочем, если подумать, и если есть какой-нибудь порядковый номер, то можно суммировать поле, где порядковый номер меньше или равен текущему... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2003, 10:00 |
|
||
|
Можно ли как получить выборку из таблицы с расчетом нарастающего итога
|
|||
|---|---|---|---|
|
#18+
За основу лучше взять алгоритм из http://www.sql.ru/faq/faq_topic.aspx?fid=125 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2003, 10:22 |
|
||
|
Можно ли как получить выборку из таблицы с расчетом нарастающего итога
|
|||
|---|---|---|---|
|
#18+
2 fedd запросом это сделать нельзя Можно-если есть уникальный ключ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2003, 10:30 |
|
||
|
Можно ли как получить выборку из таблицы с расчетом нарастающего итога
|
|||
|---|---|---|---|
|
#18+
VIG: как? В предложенном Виктором примере используется некий ключ, но он не только уникальный, но им последовательный, на этом все и построено, насколько я понял. А с просто уникальным ключом что делать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2003, 10:37 |
|
||
|
Можно ли как получить выборку из таблицы с расчетом нарастающего итога
|
|||
|---|---|---|---|
|
#18+
2 fedd А с просто уникальным ключом что делать? Вообще то я имел в виду не только уникальный, но им последовательный Но и с просто уникальным ключом можно извратиться-например написать hash-функцию ,возвращающую числовое значение, соответствующее ключу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2003, 10:54 |
|
||
|
Можно ли как получить выборку из таблицы с расчетом нарастающего итога
|
|||
|---|---|---|---|
|
#18+
>В предложенном Виктором примере Ну, пример предложен форумом MS SQL >используется некий ключ, но он не только уникальный, но им последовательный И сколько я не всматривался не нашел "последовательного" ключа (счетчика) create table #t(id int, sum1 decimal(10,2), tot_sum decimal(10,2)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2003, 10:54 |
|
||
|
Можно ли как получить выборку из таблицы с расчетом нарастающего итога
|
|||
|---|---|---|---|
|
#18+
Большое спа всем ответившим, насчет уникального и одновременно последовательного ключа : как я понимаю , иметь упорядочивающий реквизит логически необходимо, т.к. иначе непонятно в каком порядке проводить накопление - множество-то в выборке само по себе не является упорядоченным по определению. Тут возникли еще некоторые траблы: Не могу решить усложненную задачку : Нужно - все что хотелось выше плюс еще сделать для различных групп, т.е. есть , есть еще поле скажем, "КодПоставщика" и нужно посчитать нарастающие итоги для каждого из Поставщиков по дням : Т.е. исходная таблица : КодПоставщика, Дата, ДенСуммаЗаДень Нужна таблица с нарастающими по дням для каждого поставщика итогами, По всем постащикам итоги наращивать не надо - только для каждого по дням : КодПоставщика, Дата, ДенСуммаЗаДень, ИтогиНаДень ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2003, 11:35 |
|
||
|
Можно ли как получить выборку из таблицы с расчетом нарастающего итога
|
|||
|---|---|---|---|
|
#18+
SELECT Таблица1.Поле1, qq(Таблица1.Поле1) AS Выражение1 FROM Таблица1; qq - Функция в Access перед запуском запроса запусти clear modul1 ---------------------------- Option Compare Database Option Explicit Dim i As Long -------------------------- Public Function qq(a As Long) As Long i = i + a qq = qq + i End Function ---------------------- Public Function clear() i = 0 End Function ---------------------- ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2003, 11:41 |
|
||
|
Можно ли как получить выборку из таблицы с расчетом нарастающего итога
|
|||
|---|---|---|---|
|
#18+
А я не только имел в виду, но и говорил Счетчика действительно нет. Последовательный: Код: plaintext 1. 2. 3. 4. (1, 2, 3, 4) Где это используется: left outer join #t b on b.id < a.id суммируется то, где id меньше текущего ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2003, 11:43 |
|
||
|
Можно ли как получить выборку из таблицы с расчетом нарастающего итога
|
|||
|---|---|---|---|
|
#18+
SELECT Таблица1.Поле1, qq(Таблица1.Поле1) AS Выражение1 FROM Таблица1; перед запуском clear modul1 ----------------------------- Option Compare Database Option Explicit Dim i As Long --------------------------- Public Function qq(a As Long) As Long i = i + a qq = qq + i End Function ---------------------- Public Function clear() i = 0 End Function ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2003, 11:46 |
|
||
|
Можно ли как получить выборку из таблицы с расчетом нарастающего итога
|
|||
|---|---|---|---|
|
#18+
хех, не только я торможу, но и sql.ru ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2003, 11:50 |
|
||
|
Можно ли как получить выборку из таблицы с расчетом нарастающего итога
|
|||
|---|---|---|---|
|
#18+
Люди, что вы с этим счетчиком возитесь, скажите ради бога че делать - то если нужно еще по группам поставщиков это сделать (см. выше) или может объясните как приведенный Senin Viktor пример работает : Работать - то он у меня работает, но вот я что-то не въезжаю - к чему применяется группировка - ведь сумирование по Group by a.id должно вырождаться в суммрование одной строки с данным a.id , и как условие связи заставляет суммироваться целую группу по a.id>b.id ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2003, 12:05 |
|
||
|
Можно ли как получить выборку из таблицы с расчетом нарастающего итога
|
|||
|---|---|---|---|
|
#18+
А ты запусти этот запрос без Group by -"Ты все поймешь,ты все увидишь сам" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2003, 12:18 |
|
||
|
Можно ли как получить выборку из таблицы с расчетом нарастающего итога
|
|||
|---|---|---|---|
|
#18+
VIG : Да - действительно уже и сделал это А то , что я хотел оказалось тоже просто : SELECT a.id, max(a.sum1) AS sum1, sum(IIf(isnull(b.sum1),0,b.sum1)) AS tot_sum, a.KodP FROM t1 AS a LEFT JOIN t1 AS b ON (b.id<=a.id) AND (a.kodP=b.KodP) GROUP BY a.id, a.KodP; Вот все-равно одно меня смущает - как раз обнаруженное после запуска без group by - производительность - ведь без group by полученный Select содержит повторяющиеся для каждого Id группы и потом происходит сумирование записей в этих группах а предыдущие накопления никак не используются - или используются , если не используются - то не быстрее ли будет позаписная обработка в цикле , без селекания ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2003, 12:37 |
|
||
|
Можно ли как получить выборку из таблицы с расчетом нарастающего итога
|
|||
|---|---|---|---|
|
#18+
то не быстрее ли будет позаписная обработка в цикле , без селекания ? Сделай оба варианта и проверь производительность. Имхо вариант с селестами лучше ,а если еще правильно индексы настроить - то вааще! Плюс подумай о будущем -будешь переходить на SqlServer а у тебя уже есть готовое (и универсальное) решение И последнее Имхо вариант запроса с Inner Join ... on (a.id>=b.id) лучше чем с Left join (избавляешься от Null значений) Успехов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2003, 13:00 |
|
||
|
|

start [/forum/topic.php?fid=45&msg=32202784&tid=1680653]: |
0ms |
get settings: |
10ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
74ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
78ms |
get tp. blocked users: |
1ms |
| others: | 240ms |
| total: | 447ms |

| 0 / 0 |
