:: Visual Foxpro, Foxpro for DOS
суммирование
axeum
Автор

Сообщений: 107
Дата регистрации: 07.07.2020
как суммировать rashod так чтобы осталось только 2 строки, через sum и where у меня получается только суммировать вообще весь курсор(таблица примерная но основная таблица уже сгрупированна через group by) код смогу попозже скинуть если понадобится
Ratings: 0 negative/0 positive
Re: суммирование
alex;

Сообщений: 2852
Откуда: Москва
Дата регистрации: 23.11.2004
через group by)
Ratings: 0 negative/0 positive
Re: суммирование
axeum
Автор

Сообщений: 107
Дата регистрации: 07.07.2020
alex;
через group by)
так проблема в том что должно 2 строки и расход 60 и 100 соответсвенно, но может я как то не правильно группирую



Исправлено 1 раз(а). Последнее : axeum, 23.07.20 20:54
Ratings: 0 negative/0 positive
Re: суммирование
alex;

Сообщений: 2852
Откуда: Москва
Дата регистрации: 23.11.2004
axeum
alex;
через group by)
так проблема в том что должно 2 строки и расход 60 и 100 соответсвенно, но может я как то не правильно группирую

я не вижу как вы группируете
Ratings: 0 negative/0 positive
Re: суммирование
PaulWist

Сообщений: 14618
Дата регистрации: 01.04.2004
select name, sum(Rashod) as Rashod from Table1 Group by Name


------------------
Есть многое на свете, друг Горацио...
Что и не снилось нашим мудрецам.
(В.Шекспир Гамлет)




Исправлено 1 раз(а). Последнее : PaulWist, 23.07.20 21:17
Ratings: 0 negative/0 positive
Re: суммирование
alex;

Сообщений: 2852
Откуда: Москва
Дата регистрации: 23.11.2004
а может
select id, name, sum(Rashod) as Rashod from Table1 Group by id, Name


что хочет клиент?
Ratings: 0 negative/0 positive
Re: суммирование
axeum
Автор

Сообщений: 107
Дата регистрации: 07.07.2020
вот небольшой пример того как таблица выглядит после группировки
и вот сам код

SELECT ;
dk_usl.kkd,;
dk_usl.sumras,;
dk_usl.sumusl,;
dk_usl.sumusllg,;
dk_usl.sumlgt,;
dk_usl.sumvh,;
dk_usl.sumkor,;
dk_usl.sumvsg,;
dk_usl.sumopl,;
dk_usl.sumpla,;
dk_usl.sumish,;
dk_usl.penosn,;
dk_usl.penmes,;
dk_usl.penopl,;
dk_usl.penosk,;
dk_usl.kop,;
domkva.Fio,;
domkva.nls,;
domkva.adres;
from dk_usl;
left join domkva;
ON dk_usl.kkd = domkva.kkd;
where BETWEEN(kop,thisform.kopn,thisform.kopk);
order BY dk_usl.kkd;
into cursor c_dk
***группировка***
SELECT ;
c_dk.kkd,;
c_dk.nls,;
c_dk.fio,;
c_dk.adres,;
SUM(c_dk.sumish)as sumish;
from c_dk;
GROUP by;
c_dk.kkd,;
c_dk.nls,;
c_dk.fio,;
c_dk.adres,;
c_dk.sumish;
WHERE c_dk.kkd = c_dk.kkd;
into CURSOR cur_grp
Ratings: 0 negative/0 positive
Re: суммирование
AngelOKES

Сообщений: 828
Дата регистрации: 08.02.2012
А зачем в GROUP BY вы указываете вот это поле:
c_dk.sumish
? вы же по нему суммируете, в данном случае суммироваться будут только одинаковые суммы
И вот это
WHERE c_dk.kkd = c_dk.kkd
непонятно к чему и зачем?


Исправлено 1 раз(а). Последнее : AngelOKES, 24.07.20 06:39
Ratings: 0 negative/0 positive
Re: суммирование
axeum
Автор

Сообщений: 107
Дата регистрации: 07.07.2020
AngelOKES
А зачем в GROUP BY вы указываете вот это поле:
c_dk.sumish
? вы же по нему суммируете, в данном случае суммироваться будут только одинаковые суммы
И вот это
WHERE c_dk.kkd = c_dk.kkd
непонятно к чему и зачем?
спасибо огромное исправил, все заработало и действительно я не правильно группировал
Ratings: 0 negative/0 positive
Re: суммирование
PavlikPavlikovich

Сообщений: 170
Дата регистрации: 21.07.2010
Здравствуйте!
Что бы не создавать новую тему, спрошу здесь.
Подскажите, можно в данном случае обойтись без цикла. Что бы ускорить выполнение кода.
наименование специально написаны по русски, что бы лучше донести суть.
SELECT таблицаисходная
INDEX ON наименование TAG 111
INDEX ON наименование+размер TAG 222 && это для нового варианта кода
SELECT DISTINCT наименование,размер,000000.00 AS штук FROM таблицаисходная INTO CURSOR таблицановая READWRITE WHERE !DELETED()
SELECT таблицановая
INDEX ON наименование TAG 111
INDEX ON наименование+размер TAG 222 && это для нового варианта кода
SET RELATION TO наименование+размер INTO таблицаисходная
DO WHILE !EOF('таблицановая')
mнаименование=наименование
mразмер=размер
SELECT таблицаисходная
SUM ROUND(штук,2) FOR наименование=mнаименование AND размер=mразмер TO a1
SELECT таблицановая
REPLACE штук WITH a1
SKIP
ENDDO
На этом код закончен
Для ускорения. Хочу вместо цикла использовать что-то типа
SELECT таблицановая
GO TOP
REPLACE ALL schtuk2 WITH sum round(таблицаисходная.штук,2) && естественно данный код не работает. Ошибка. Я понимаю почему. Ведь SUM использует перебор записей.
Помогите найти альтернативу. Как суммировать при отношении один ко многим.



Исправлено 2 раз(а). Последнее : PavlikPavlikovich, 21.02.21 11:58
Ratings: 0 negative/0 positive
Re: суммирование
PaulWist

Сообщений: 14618
Дата регистрации: 01.04.2004
CREATE CURSOR test (cName c(20), cSize c(10), nCount int)
INSERT INTO test VALUES ('Boots', '40', 20)
INSERT INTO test VALUES ('Boots', '40', 20)
INSERT INTO test VALUES ('Boots', '41', 10)
INSERT INTO test VALUES ('Boots', '45', 5)
INSERT INTO test VALUES ('Sheet', '40x20', 10)
INSERT INTO test VALUES ('Sheet', '40x20', 30)
INSERT INTO test VALUES ('Sheet', '20x20', 10)
INSERT INTO test VALUES ('Sheet', '30x20', 10)
SELECT cName, cSize, SUM(nCount) as nSum FROM test GROUP BY cName, cSize


------------------
Есть многое на свете, друг Горацио...
Что и не снилось нашим мудрецам.
(В.Шекспир Гамлет)
Ratings: 0 negative/0 positive
Re: суммирование
PavlikPavlikovich

Сообщений: 170
Дата регистрации: 21.07.2010
PaulWist
SELECT cName, cSize, SUM(nCount) as nSum FROM test GROUP BY cName, cSize
Огромное Вам спасибо! Я тоже хотел на задачу через SELECT. Но не получалось. GROUP BY помогло в данном случае
Прикрутил. Очень увеличило скорость (в 240 раз) и сократило код. Еще раз спасибо!
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 21 (Гостей: 21)

© 2000-2024 Fox Club 
Яндекс.Метрика