Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Нарастающий итог
|
|||
|---|---|---|---|
|
#18+
Всем доброго утра! Есть таблица: Код: plaintext 1. 2. 3. Как получить нарастающий итог по последнему столбцу? Нужно получить: Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2005, 08:04 |
|
||
|
Нарастающий итог
|
|||
|---|---|---|---|
|
#18+
Если речь идёт о .mdb формате (сеанс телепатии) Напишите функцию, и вызывайте её из запроса. Статическую таблицу в таком виде как вы описали не получить - только основанный на ней запрос. Если же речь идёт имено о таблице и сохранении в ней данных сальдо (это так называется) то без пр-ры (или запроса UPDATE бла-бла) которая будет считать это сальдо махом и записывать рез-т в поле, тоже ничего не получится. Мой совет: сделайте view (сохранённый запрос) и вызывайте что-нибудь в таком духе. Public Function qfSumField(Optional vVar As Variant) As Double 'Ревизия: 26.07.05 ****** *.*. 'ф-ция суммирования полей в запросе с накоплением qfSumField(ПОЛЕ) AS Summa 'возвращает тип Double (сквозное сальдо) в зависимости от сортировки запроса, 'gdSumQdf - глобальная переменная, перед вызовом нового запроса (отчёта) обнулить, 'если не нужен сквозной итог по нескольким запросам или отчётам. '-------------------------------------------------------------------------------- If IsMissing(vVar) Then 'если значение не передано - gdSumQdf = 0 'обнулить в любом случае Else gdSumQdf = gdSumQdf + Nz(vVar, 0) 'прибавить не null-евую сумму End If qfSumField = gdSumQdf 'вернуть в поле запроса End Function Можно использовать статическую переменную внутри ф-ции, у меня была необходимость именно глоб.перем. Внимание! Эта функция работает не совсем так, как вы показали на таблице, первая строчка запроса будет не (0) (интересно, чем обусловлено такое написание сальдо? ПМСМ, оно не совсем верное - первое сальдо должно быть 50, иначе у вас получается смещение на дату, запаритесь стыковать с отчётами, работающими по чёткой дате дня, например.) Но если вам, действительно нужно именно ТАК, модифицируйте код чут-чуть (одна строка) - как, догадайтесь сами. ;-) З.Ы. На больших объёмах скорость такого решения невысокая. Если вы вуерены на всё 100%, что пустых значений не передаётся в код, уберите If-ы, оставте простое суммирование (ой, не зарекайтесь), это даст прирост в скорости. Но, всё равно, функции Акса на ВБА, лучше накладывать на результирующие наборы данных. И куда на этом форуме девается нафиг красивое форматирование текста? Стараешься, структурируешь код, глаз радуется - постишь и грусть-тоска... всё в кашу. Табы и те порезали... Рич текст формат... З.Ы. О! Я проснулся! Суббота, 8:00, на работе, головой на ноутбуке... Аднака... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2005, 09:00 |
|
||
|
Нарастающий итог
|
|||
|---|---|---|---|
|
#18+
Перечитал ещё раз ваше ТЗ. Поправте представление сальдо! Пока не поздно. Показываю простой фокус: Давайте спросим вашу шуструю программу - какое кол-во (не знаю чего это) за 01.01.2005? Результирующее представление (таб2): строка1 + строка2 = 50. Ага. Замечательно. А если запросить исходную таблицу, ведь результирующая основывается на ней. Логично? Ну надо проверить корректность расчётов, от балды. Делаем. Исходная таблица (таб1): строка1 + строка2 = 120. 50 <> 120 Хм-м... Кажется, начались проблемы. Понимаете? А теперь представте пол-миллиона таких записей за год (для Акса это не предел - табличка не широкая). В общем, спросили одно, я вам советую для начала другое. :-) Поправте представление сальдо. Оно должно быть таким: 1 | 01.01.2005 | 25 | 50 | 50 2 | 01.01.2005 | 28 | 70 | 120 3 | 05.02.2005 | 32 | 40 | 160 4 | 06.02.2005 | 45 | 60 | 200 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2005, 09:18 |
|
||
|
Нарастающий итог
|
|||
|---|---|---|---|
|
#18+
2 nibbles MS SQLServer, Transact-SQL... declare @tot_sum decimal(10,2) set @tot_sum = 0 И каким боком это к вопросу об Аксесе и .mdb, уважаемый? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2005, 10:34 |
|
||
|
Нарастающий итог
|
|||
|---|---|---|---|
|
#18+
2ТеньОтцаГамлета Почитайте фак внимательнее - предлагаемое там решение очень легко адаптируется к Access ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2005, 10:42 |
|
||
|
Нарастающий итог
|
|||
|---|---|---|---|
|
#18+
И вообще, цитата предыдущего моего поста: "Статическую таблицу в таком виде как вы описали не получить - только основанный на ней запрос. Если же речь идёт имено о таблице и сохранении в ней данных сальдо (это так называется) то без пр-ры (или запроса UPDATE бла-бла) которая будет считать это сальдо махом и записывать рез-т в поле, тоже ничего не получится." И чем это противоречит тому, что написано в ФАК-е? Пускай и на T-SQL... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2005, 10:45 |
|
||
|
Нарастающий итог
|
|||
|---|---|---|---|
|
#18+
2 ТеньОтцаГамлета не надо ля-ля... ниже я привел запросы для Access, который, по-Вашему, там невозможно написать (разберетесь, как их юзать?)... и вообще - идите-ка на www.sql-ex.ru - дойдете там до 100-го упражнения и убедИтесь, что можно получить выборку практически любой сложности. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2005, 10:56 |
|
||
|
Нарастающий итог
|
|||
|---|---|---|---|
|
#18+
нужно заменить: decimal(10,2) на Decimal insert на insert into isnull на nz ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2005, 11:01 |
|
||
|
Нарастающий итог
|
|||
|---|---|---|---|
|
#18+
Сударь, про ля-ля забудьте. В детском саду мы с вами в один горшок не делали. Я предложил человеку не ФАК с адаптацией, и не к Гетцу послал, в магазин "Книги Нижневартовска", а конкретное решение для его задачи. Только предложил исправить представление сальдо, ибо, мой личный опыт говорит о том, что с таким представлением сальдо (наверняка это ему нарисовал заказчик-учётчик-бухгалтер) получится каша. Я на эти грабельки наступал, году так в 98-м. Как вспомню, так вздрогну... Вот и предложил (не потребовал). И пример привёл, самый простой, что оказался под рукой. ПМСМ, ему уже решать - менять или нет, применять или отказаться. А к ФАКу нет претензий. ФАК - просто информация к размышлению, а не панацея на все случаи жизни. И решение описано интересное, гимнастика для ума, но лично я его на "боевом" проекте НЕ применил бы! На это есть ВЕСКИЕ, ПМСМ, причины, выходящие за рамки этого топика. З.Ы, Фак читал внимательно. Чесслово. :-) И не сегодня. И даже не в этом году. И даже не на этом сайте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2005, 11:02 |
|
||
|
Нарастающий итог
|
|||
|---|---|---|---|
|
#18+
ТеньОтцаГамлетаИ вообще, цитата предыдущего моего поста: "Статическую таблицу в таком виде как вы описали не получить - только основанный на ней запрос. Если же речь идёт имено о таблице и сохранении в ней данных сальдо (это так называется) то без пр-ры (или запроса UPDATE бла-бла) которая будет считать это сальдо махом и записывать рез-т в поле, тоже ничего не получится." И чем это противоречит тому, что написано в ФАК-е? Пускай и на T-SQL... Не Вы являетесь автором топика. А автор ни гу-гу не сказал о том, что ему нужна еще одна таблица, в которой будет добавлено поле с нарастающим итогом. Не умножайте сущностей сверх необходимого - пользуйтесь запросами\представлениями, они для того и были придуманы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2005, 11:05 |
|
||
|
Нарастающий итог
|
|||
|---|---|---|---|
|
#18+
И в этом "...и убедИтесь, что можно получить выборку практически любой сложности." я даже не сомневаюсь. Мало того, это моя работа и делаю я её каждый день. "Не умножайте сущностей сверх необходимого" Золотые слова. View не сущность, а представление. Сущность - сохранение значения сальдо в поле в виде готового и неизменного результата, и при изменении любого количества задним числом, конвульсивный пересчёт всех сальдо, сохранение, вперёд и с веером... Именно это я пытался донести. Но опять-же, если требования сохранить именно в таблице (посмотрите мой пост), то это совсем другая песня, и я её не словом ни обрисовал. З.Ы. Вот так всегда, захочешь помочь человеку конкретным примером на конкретное условие, пошлют тебя в ФАК, по немного другому поводу, с немного другими исходными... и в общем, да ну вас... суббота, утро и все уже злые... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2005, 11:16 |
|
||
|
Нарастающий итог
|
|||
|---|---|---|---|
|
#18+
И вообще, с чего вы взяли, что я предлагал ещё одну таблицу? Вы где это прочитали? Я предлагал запрос (view) SELECT бла-бла, qfSaldo(бла-бла) AS SaldoMaldo... и т.п. Где здесь ещё одна сущность? Это просто вычисляемое поле. Самым простым способом в Аксе - пользовательская функция ВБА. И даже не собираюсь дискутировать по поводу вреда-пользы, эффективности-вредности пользовательских функций. Я предложил простое решение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2005, 11:22 |
|
||
|
Нарастающий итог
|
|||
|---|---|---|---|
|
#18+
ладно-ладно, не обижайтесь - действительно был резок - и голова действительно побаливает после вчерашнего "банно-стаканного"... :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2005, 11:25 |
|
||
|
Нарастающий итог
|
|||
|---|---|---|---|
|
#18+
Ок. Принято. :-) 2 xax_nv: Пардон за флейм. :-) Тут на форуме все немного ненормальные. И я в том числе. Только тронь... З.Ы. А я вот 3-й день у заказчика, с раскладушкой и тапочками... (вычеркнуто цензурой)... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2005, 11:47 |
|
||
|
Нарастающий итог
|
|||
|---|---|---|---|
|
#18+
"Ребята, давайте жить дружно!" Извиняюсь, что завел тему и сбежал. Товарищ-гуманитарий затеял ремонт, пришлось помогать ему с электрикой. Пока бегло пробежал по топикам, сейчас буду вникать в суть предложений и советов. Спасибо за активное участие. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2005, 13:55 |
|
||
|
Нарастающий итог
|
|||
|---|---|---|---|
|
#18+
Привет Всем ! Не знаю надо ли это автору, но если в его таблице появится строка 5 и нарастающий итог должен быть выстроен по дате то запрос надо переделывать. (например нумеровать самостоятельно с учетом даты) id dte f1 f2 1 01.01.2005 25 50 2 01.01.2005 28 70 3 05.02.2005 32 40 4 06.02.2005 45 60 5 01.01.2005 100 100 ЗЫ Проститес за древневатость поднятого топика ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2005, 13:13 |
|
||
|
Нарастающий итог
|
|||
|---|---|---|---|
|
#18+
Евгений1234-5, И что делать в таком случае? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2012, 15:50 |
|
||
|
Нарастающий итог
|
|||
|---|---|---|---|
|
#18+
Aeliot, Нашёл. Выглядит примерно так Код: sql 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2012, 16:02 |
|
||
|
|

start [/forum/topic.php?fid=45&gotonew=1&tid=1621638]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
42ms |
get topic data: |
13ms |
get first new msg: |
8ms |
get forum data: |
3ms |
get page messages: |
76ms |
get tp. blocked users: |
1ms |
| others: | 262ms |
| total: | 436ms |

| 0 / 0 |
