powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / VFP 9
24 сообщений из 99, страница 4 из 4
VFP 9
    #38130485
IgorNG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex 0163,

Так поле - сумма. Каким образом по ней группировать?
...
Рейтинг: 0 / 0
VFP 9
    #38130498
Alex 0163
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alex 0163IgorNG,

SELECT F012710A.OIS,(IIF(sDetail.no=10,sum(sDetail.cntdetfakt),000))as p10
Inner JOIN sDetail;
on F012710A.kd=sDetail.kd;
GROUP BY F012710A.OIS

Теперь запрос выглядит так и нужно сгруппировать по полю р10! но как это сделать я не знаю! подскажите!

то есть нужно вытянуть все данные с NO=10 и суммировать их! а если NO не равно 10 надо поставить 0.
...
Рейтинг: 0 / 0
VFP 9
    #38130507
IgorNG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot Alex 0163][quot Alex 0163]IgorNG,

SELECT F012710A.OIS,sum(sDetail.cntdetfakt) as p10
Inner JOIN sDetail;
on F012710A.kd=sDetail.kd;
WHERE sDetail.no=10
GROUP BY F012710A.OIS
...
Рейтинг: 0 / 0
VFP 9
    #38130508
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex 0163то есть нужно вытянуть все данные с NO=10 и суммировать их! а если NO не равно 10 надо поставить 0.Так разве этот кусок
Код: sql
1.
IIF(sDetail.no=10,sum(sDetail.cntdetfakt),000)

не это самое делает?

Но если вам нужна группировка результатов уже имеющегося запроса, то
Код: sql
1.
2.
3.
select ...
from (ваш_запрос) t0
group by ...
...
Рейтинг: 0 / 0
VFP 9
    #38130515
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tanglirТак разве этот кусок
Код: sql
1.
IIF(sDetail.no=10,sum(sDetail.cntdetfakt),000)


не это самое делает?стоп, не то
тут вообще бред написан
надо так
Код: sql
1.
sum(IIF(sDetail.no=10,sDetail.cntdetfakt,0))



ЗЫ. IgorNG, ваш запрос может быть быстрее, но отсечёт все записи, у которых нет ид=10. А ТСу, может, охота их видеть с нулями.
...
Рейтинг: 0 / 0
VFP 9
    #38130517
IgorNG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tanglir,

Как автор написал:
...
Рейтинг: 0 / 0
VFP 9
    #38130523
IgorNG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tanglir,

Как автор написал:
"то есть нужно вытянуть все данные с NO=10 и суммировать их! а если NO не равно 10 надо поставить 0."
А что ему на самом деле нужно? Все отвечают так, как понимают вопрос :)
...
Рейтинг: 0 / 0
VFP 9
    #38130549
Alex 0163
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем большое спасибо, имелось ввиду другое , но вы подтолкнули на умную мысль, которая помогла решить задачу!
...
Рейтинг: 0 / 0
VFP 9
    #38130837
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В FoxPro в качестве полей группировки Group by можно ставить порядковые номера полей выборки. Также как и в Order By

Код: sql
1.
2.
3.
SELECT field1, field2, sum(field3) ;
from MyTable ;
GROUP BY 1,2



Только в данном случае это не поможет, поскольку Вы хотите сделать группировку по полю, в котором выполняется суммирование. А это бессмысленно. Либо суммирование, либо группировка.
...
Рейтинг: 0 / 0
VFP 9
    #38133255
Alex 0163
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВладимирМ,

Получился вот такой вот код!

set dele on
SELECT f012710a.ois, sdetail.kd, SUM(IIF(sDetail.no=5,sDetail.cntdetfakt,0)) as p5,SUM(IIF(sDetail.no=6,sDetail.cntdetfakt,0)) as p6,;
sum(IIF(sDetail.no=8,sDetail.cntdetfakt,0))as p8,sum(IIF(sDetail.no=9,sDetail.cntdetfakt,0))as p9,sum(IIF(sDetail.no=10,sDetail.cntdetfakt,0))as p10,;
sum(IIF(sDetail.no=11,sDetail.cntdetfakt,0))as p11,sum(IIF(sDetail.no=13,sDetail.cntdetfakt,0))as p13,;
sum(IIF(sDetail.no=15,sDetail.cntdetfakt,0))as p15,sum(IIF(sDetail.no=16,sDetail.cntdetfakt,0))as p16,sum(IIF(sDetail.no=20,sDetail.cntdetfakt,0))as p20,;
sum(IIF(sDetail.no=25,sDetail.cntdetfakt,0))as p25,sum(IIF(sDetail.no=26,sDetail.cntdetfakt,0))as p26,;
sum(IIF(sDetail.no=27,sDetail.cntdetfakt,0))as p27, sum(IIF(sDetail.no=30,sDetail.cntdetfakt,0))as p30,sum(IIF(sDetail.no=35,sDetail.cntdetfakt,0))as p35,;
sum(IIF(sDetail.no=40,sDetail.cntdetfakt,0))as p40,sum(IIF(sDetail.no=41,sDetail.cntdetfakt,0))as p41,sum(IIF(sDetail.no=43,sDetail.cntdetfakt,0))as p43,;
sum(IIF(sDetail.no=45,sDetail.cntdetfakt,0))as p45,sum(IIF(sDetail.no=50,sDetail.cntdetfakt,0))as p50,;
sum(IIF(sDetail.no=60,sDetail.cntdetfakt,0))as p60, sum(IIF(sDetail.no=70,sDetail.cntdetfakt,0))as p70,sum(IIF(sDetail.no=71,sDetail.cntdetfakt,0))as p71,;
sum(IIF(sDetail.no=74,sDetail.cntdetfakt,0))as p74,sum(IIF(sDetail.no=80,sDetail.cntdetfakt,0))as p80,sum(IIF(sDetail.no=81,sDetail.cntdetfakt,0))as p81,;
sum(IIF(sDetail.no=85,sDetail.cntdetfakt,0))as p85,sum(IIF(sDetail.no=90,sDetail.cntdetfakt,0))as p90,;
sum(IIF(sDetail.no=95,sDetail.cntdetfakt,0))as p95, sum(IIF(sDetail.no=100,sDetail.cntdetfakt,0))as p100,sum(IIF(sDetail.no=101,sDetail.cntdetfakt,0))as p101,;
sum(IIF(sDetail.no=105,sDetail.cntdetfakt,0))as p105,sum(IIF(sDetail.no=110,sDetail.cntdetfakt,0))as p110,sum(IIF(sDetail.no=115,sDetail.cntdetfakt,0))as p115,;
sum(IIF(sDetail.no=120,sDetail.cntdetfakt,0))as p120,sum(IIF(sDetail.no=125,sDetail.cntdetfakt,0))as p125,;
sum(IIF(sDetail.no=130,sDetail.cntdetfakt,0))as p130, sum(IIF(sDetail.no=135,sDetail.cntdetfakt,0))as p135,sum(IIF(sDetail.no=140,sDetail.cntdetfakt,0))as p140,;
sum(IIF(sDetail.no=150,sDetail.cntdetfakt,0))as p150,sum(IIF(sDetail.no=160,sDetail.cntdetfakt,0))as p160,sum(IIF(sDetail.no=170,sDetail.cntdetfakt,0))as p170,;
sum(IIF(sDetail.no=180,sDetail.cntdetfakt,0))as p180 FROM ;
sdetail;
LEFT JOIN f012710a ON sdetail.kd=f012710a.kd AND sdetail.no=f012710a.no;
GROUP BY 1,2;
into cursor q
...
Рейтинг: 0 / 0
VFP 9
    #38133362
XAndy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alex 0163,

Простыня, однако ;). Если вот эти числа 5,6,8,9,...,170,180 есть результат некой выборки или справочник (извините, тему не читал), то можно и написание селекта автоматизировать. К примеру, пусть в табличке MyDetail в поле No перечень этих деталей, тогда Ваш селект вот

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
local cSelect
cSelect = ;
   "select "+;
   "f012710a.ois,"+;
   "sdetail.kd "
select MyDetail
scan
   cSelect = cSelect + ;
      ",sum(iif(sDetail.no="+tran(MyDetail.no)+",sDetail.cntdetfakt,0)) as p"+tran(MyDetail.no)+" "
endscan
cSelect = cSelect + ;
   "from sdetail "+;
   "left join f012710a on sdetail.kd=f012710a.kd and sdetail.no=f012710a.no "+;
   "group by 1,2 "+;
   "into cursor q "
&cSelect



(в качестве извращения :) )
...
Рейтинг: 0 / 0
VFP 9
    #38149719
Alex 0163
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем снова привет! создаю отчет в Эксель через VFP9, он сохраняется в определенное место. Вопрос возможно ли через VFP9 форматировать или создавать сразу этот файл со своими параметрами в ШАПКЕ экселя????
...
Рейтинг: 0 / 0
VFP 9
    #38149806
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex 0163,

сразу - нет, пишите свой "выгружатор" или используйте имеющийся.
...
Рейтинг: 0 / 0
VFP 9
    #38149820
Alex 0163
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tanglir,

а возможно ли создать отчет в файл Эксель в готовый шаблон который был создан ранее(в котором уже сформирована шапка)???
...
Рейтинг: 0 / 0
VFP 9
    #38149842
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex 0163, смотря что вы понимаете под словом "шаблон". Если шапку - то поищите тут по "arraypasser".
...
Рейтинг: 0 / 0
VFP 9
    #38149914
Alex 0163
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tanglir,

Шаблон -это уже заранее готовый Эксель файл с уже готовой шапкой в который нужно только внести данные
...
Рейтинг: 0 / 0
VFP 9
    #38150502
Jonny540
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex 0163tanglir,

Шаблон -это уже заранее готовый Эксель файл с уже готовой шапкой в который нужно только внести данныеВносите, кто мешает? Ессно, не "одной командой". И шапку можно сделать из фокса, только ручками немного поработать придется...
...
Рейтинг: 0 / 0
VFP 9
    #38150585
Alex 0163
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Jonny540,
а можно пример кода в котором мы с заполняем шаблон или или как создается КРАСИВАЯ шапка в фоксе
...
Рейтинг: 0 / 0
VFP 9
    #38150629
Alex 0163Jonny540,
а можно пример кода в котором мы с заполняем шаблон или или как создается КРАСИВАЯ шапка в фоксе
Чем отличается "шаблон" от "не шаблона"? Да ничем... Просто провели некую подготовку, красивостей нарисовали....
А так - точно так же помещаем значения в ячейки.... Объединяем ячейки, меняем шрифт и размер букв и т.д. Можно даже формулу засунуть....
[SRC пример из реальной программы]
LPARAMETERS ldDate1,lDdate2,tnkodadr,lcregion,tnkodisp,tnmode,lcFileName

SET date GERMAN
#INCLUDE "..\..\libs\include\fatfact.h"
#INCLUDE "..\LIBS\INCLUDE\excel.h"

* проверяем количество параметров и то, что нам передали в параметрах
... удалено....

*подготваливаем необходимые вспомогательные данные
lnweek = WEEK(ldDate1,1, 2)
loWeek1 = GetFirstDayOfWeek(lnweek, YEAR(ldDate1))
loWeek2 = GetFirstDayOfWeek(lnweek+1, YEAR(ldDate1))
loWeek3 = GetFirstDayOfWeek(lnweek+2, YEAR(ldDate1))
loWeek4 = GetFirstDayOfWeek(lnweek+3, YEAR(ldDate1))
loWeek5 = GetFirstDayOfWeek(lnweek+4, YEAR(ldDate1))
loWeek6 = GetFirstDayOfWeek(lnweek+5, YEAR(ldDate1))

ldBeg6 = loWeek6.dFirstDay
ldEnd6 = loWeek6.dLastDate
ldBeg5 = loWeek5.dFirstDay
ldEnd5 = loWeek5.dLastDate
ldBeg4 = loWeek4.dFirstDay
ldEnd4 = loWeek4.dLastDate
ldBeg3 = loWeek3.dFirstDay
ldEnd3 = loWeek3.dLastDate
ldBeg2 = loWeek2.dFirstDay
ldEnd2 = loWeek2.dLastDate
ldBeg1 = loWeek1.dFirstDay
ldEnd1 = loWeek1.dLastDate

*Подготавливаем данные для выдачи в Excel
... удалено....

SELECT * from curtmp INTO CURSOR tmp READWRITE

* Делаем строку для итогов первого уровня
SELECT 1 as sel, koddept, kodtrademark, tradename, kodcomppay, companyname FROM tmp GROUP BY 1,2,3,4,5,6 INTO CURSOR cur_itg_comp
* Делаем строку для итогов второго уровня
SELECT 2 as sel, 999999999 as kodtrademark, " " as tradename, kodcomppay, "Итого по "+companyname as companyname FROM tmp GROUP BY 1,2,3,4,5 INTO CURSOR itg_comp

SELECT tmp
APPEND FROM DBF('cur_itg_comp')
APPEND FROM DBF('itg_comp')
SELECT * from tmp ORDER BY kodcomppay, kodtrademark, sel, koddept, code INTO CURSOR tmp && Упорядочиваем строки: сначала строки с данными, потом итоги первого уровня, потом итоги второго уровня...

IF RECCOUNT('tmp')=0
RETURN
ENDIF

*Открываем шаблон
lcNameFileOpen = 'с:\Template\Шаблон_new.xlt'
MyXlsFactory = .... && Создаем объект приложения Excel
MyXlsFactory.Off_App.Workbooks.ADD(lcNameFileOpen) && Открываем шаблон
MyXlsFactory.Off_App.DisplayAlerts = .f.
MyXlsFactory.WorkSheet = MyXlsFactory.Off_App.Sheets(1)
MyXlsFactory.Off_App.Sheets(1).Activate
MyXlsFactory.Off_App.Calculation = xlManual && переводим в ручной режим

* заполняем ячейки на рабочем листе Экселя
... удалено ...

WITH MyXlsFactory.WorkSheet

* Украшательства: Ставим группировку в Экселе и прописываем формулы, отсутствующие в шаблоне
* Первые пять строк - шапка шаблона
SELECT tmp
i = 0
k = 0
p = 0
indexgrp = 5
SCAN

IF sel = 0
i = i + 1
ELSE
IF sel = 1
p = RECNO()
.range(.cells[6+ p- i,1],.cells[6+ p-1,1]).Rows.Group
.range(.cells[6+ p - i,1],.cells[6+ p-1,1]).Rows.Group
.range(.cells[6+ p- i,1],.cells[6+ p-1,1]).Rows.Group
.cells[6+ p,1].Rows.Group
.cells[6+ p,1].Rows.Group
.range(.cells[6+ p,1],.cells[6+ p,153]).Font.FontStyle = ...
.range(.cells[6+ p,1],.cells[6+ p,153]).Interior.ColorIndex = 15
FOR k = 6 TO 152
.cells[6+ p,k].FormulaR1C1 = TEXTMERGE('=SUM(R[-<<i>>]C:R[-1]C)')
ENDFOR

.cells[6+ p,153].FormulaR1C1 = TEXTMERGE('=IFERROR((RC[-2]/RC[-3])*100,"""")')

i = 0
endif
ENDIF
ENDSCAN

*продолжаем украшательства, группы следующего уровня группировки
SELECT tmp
GO TOP
i = 0
k = 0
p = 0
indexgrp = 5
formula = ''
SCAN FOR sel = 2
p = RECNO()
lnKOdcomp = tmp.kodcomppay
SELECT RECNO() as recid, sel,kodcomppay FROM tmp INTO CURSOR test WHERE sel > 0 AND tmp.kodcomppay = lnkodcomp ORDER BY 2 desc
SELECT test
GO top
p1 = test.recid
SKIP 1
DO while !EOF()
IF EMPTY(formula)
formula = "="
ELSE
formula = formula + "+"
ENDIF
formula = formula + "R["+ALLTRIM(STR(test.recid - p1))+"]C"
SKIP 1
ENDDO
.cells[6+ p,1].Rows.Group

.range(.cells[6+ p,1],.cells[6+ p,153]).Font.FontStyle = ....
.range(.cells[6+ p,1],.cells[6+ p,153]).Interior.ColorIndex = 15
FOR k = 6 TO 152
.cells[6+ p,k].FormulaR1C1 = TEXTMERGE(formula)
ENDFOR

.cells[6+ p,153].FormulaR1C1 = TEXTMERGE('=IFERROR((RC[-2]/RC[-3])*100,"""")')

formula = ''
i = 0
SELECT tmp
ENDSCAN

p1 = RECCOUNT("tmp")+1
.range(.cells[6+ p1,1],.cells[6+ p1,153]).Font.FontStyle = ....
.range(.cells[6+ p1,1],.cells[6+ p1,153]).Interior.ColorIndex = 15

* Итоги по документу (TOTAL)
FOR k = 6 TO 151
.cells[6+ p1,k].FormulaR1C1 = TEXTMERGE('=SUMIF(R[-<<p1-1>>]C[-<<k-2>>]:R[-1]C[-<<k-2>>],"",R[-<<p1-1>>]C:R[-1]C)')
ENDFOR

.cells[6+ p1,152].FormulaR1C1 = TEXTMERGE('=SUMIF(R[-<<p1-1>>]C[-<<k-2>>]:R[-1]C[-<<k-2>>],"",SUMIF(R[-<<p1-1>>]C:R[-1]C,"<0",R[-<<p1-1>>]C:R[-1]C))')
.cells[6+ p1+1,152].FormulaR1C1 = TEXTMERGE('=SUMIF(R[-<<p1-1>>]C[-<<k-2>>]:R[-1]C[-<<k-2>>],"",SUMIF(R[-<<p1-1>>]C:R[-1]C,">=0",R[-<<p1-1>>]C:R[-1]C))')
.cells[6+ p1,153].FormulaR1C1 = TEXTMERGE('=IFERROR((RC[-2]/RC[-3])*100,"""")') &&TEXTMERGE('=IFERROR((1-ABS(RC[-2])/RC[-1])*100,"""")')
ENDWITH

MyXlsFactory.Off_App.Calculation = xlAutomatic && Переводим вычисления в автоматический режим
* Здесь сформированный документ отражается на экране пользователя....

* Чистим за собой все курсорры
USE IN SELECT('tmp')
USE IN SELECT('cur_itg_comp')
USE IN SELECT('itg_comp')
...
[/SRC]
...
Рейтинг: 0 / 0
VFP 9
    #38151572
Alex 0163
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Станислав С...кий,

большое спасибо
...
Рейтинг: 0 / 0
VFP 9
    #38169351
Alex 0163
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alex 0163,

Всем привет! нужна помощь есть вот такие запросики:

SET DELETED on
SELECT Sdetail.id_sm, Stask.datesm,Stask.smena, MAX(Sdetail.no)as max_nom FROM sdetail ;
INNER JOIN stask ;
ON Sdetail.id_sm = Stask.id_sm;
WHERE BETWEEN(stask.datesm,DATE(2013,02,18),DATE(2013,02,22));
AND right(cast(sdetail.no as m),1) = '0';
group by 1,2,3;
into cursor q

Select q.id_sm, q.datesm,q.smena, q.max_nom, SUM(Sdetail.massa) FROM q;
left join sdetail;
ON q.id_sm = sdetail.id_sm;
AND q.max_nom= Sdetail.no;
GROUP BY 1,2,3,4;

Помогите сделать что бы это все делалось в одном запросе. заранее спасибо
...
Рейтинг: 0 / 0
VFP 9
    #38169366
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex 0163Помогите сделать что бы это все делалось в одном запросе.
Alex 0163Select q.id_sm, q.datesm,q.smena, q.max_nom, SUM(Sdetail.massa) FROM >>>q<<<;
left join sdetail;выделенное заменяете на
Код: sql
1.
(текст_первого_запроса) as q
...
Рейтинг: 0 / 0
VFP 9
    #38169369
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
Select   q.id_sm, q.datesm,q.smena, q.max_nom, SUM(Sdetail.massa)  FROM q;
           left join sdetail;

вот так выделенное.
...
Рейтинг: 0 / 0
VFP 9
    #38169384
Alex 0163
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tanglir,

а в одном Select можно все сделать?
...
Рейтинг: 0 / 0
24 сообщений из 99, страница 4 из 4
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / VFP 9
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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