powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Group by в запросе
4 сообщений из 4, страница 1 из 1
Group by в запросе
    #38178388
Pulsar_p
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго времени суток!
Столкнулся вот с какой задачей:
Есть таблица (в данном случае курсор ‘oldcurskva’), надо сформировать новый курсор (‘curskva’) с теми же полями ну и построчно просуммировать два поля (plkuh,plpod) в новое поле spodsob. Количество полей в ‘curskva’ плавающее, но эти 2 поля есть всегда. Задача довольно простая, но все упирается в выражение для GROUP BY, потом “пихаю” его в макроподстановку, получаю следующее:

* Формирую выражение для GROUP BY (не знаю, как по-другому)
kolpoley=FCOUNT('oldcurskva')
strokapolei=''
FOR i=1 TO kolpoley
strokapolei=strokapolei+ALLTRIM(STR(i))
IF i<>kolpoley
strokapolei=strokapolei+','
ENDIF
ENDFOR
*
SELECT uu.*,CAST(SUM(uu.plkuh+uu.plpod) AS Numeric(5,1)) AS spodsob ;
FROM oldcurskva uu GROUP BY &strokapolei INTO CURSOR curskva READWRITE
Самое интересное, если установить SET ENGINEBEHAVIOR 70, весь этот «макроподстановочный формирователь» не нужен. Но использование подобной установки (SET ENGINEBEHAVIOR …) крайне нежелательно. Да и без макроподстановок лучше обойтись. (В статье Владимира Максимова макроподстановки подвергаются жесткой критике, в целом я с ним согласен.)
Есть ли более изящное решение данной проблемы?
...
Рейтинг: 0 / 0
Group by в запросе
    #38178465
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По-хорошему надо просто перечислить поля вместо макроподстановки.
Код: sql
1.
2.
SELECT uu.f1, uu.f2, uu.f3, uu.f4, CAST(SUM(uu.plkuh+uu.plpod) AS Numeric(5,1)) AS spodsob ;
FROM oldcurskva uu GROUP BY uu.f1, uu.f2, uu.f3, uu.f4 INTO CURSOR curskva READWRITE


И не изобретать велосипед с квадратными колесами.
...
Рейтинг: 0 / 0
Group by в запросе
    #38178470
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pulsar_pЕсть таблица (в данном случае курсор ‘oldcurskva’), надо сформировать новый курсор (‘curskva’) с теми же полями ну и построчно просуммировать два поля (plkuh,plpod) в новое поле spodsob.
Если задача стоит именно так, то зачем вообще GROUP BY ?
Суммирование двух полей одной записи это "+" а не SUM()
Код: sql
1.
2.
SELECT uu.*,CAST((uu.plkuh+uu.plpod) AS Numeric(5,1)) AS spodsob ;
FROM oldcurskva uu INTO CURSOR curskva READWRITE
...
Рейтинг: 0 / 0
Group by в запросе
    #38178518
Pulsar_p
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дима, конечно. Сам себе намудрил: там под SUM(...) изначально другое выражение было, я потом запрос переделывал, упустил из виду, разобрался уже, спасибо за участие...
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Group by в запросе
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]