powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Как сложить поля в таблицах
8 сообщений из 83, страница 4 из 4
Как сложить поля в таблицах
    #38175774
q1w1e1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
94q1w1e1, условие задачи такое что нужно сложить поля st1,st2...st200 пропустив во всех 12-ти таблицах первые три строчки так как там слова(символы), а в последующих строках цифры которые надо сложить

for i=1 to 12
use tabl+(alltrim(str(i)))
go 4 && попадаем на 4 запись, три пропущены..:-)
do while !eof()
skip
enddo
endfor
...
Рейтинг: 0 / 0
Как сложить поля в таблицах
    #38175788
q1w1e1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
for i=1 to 12
use tabl+(alltrim(str(i))) alias tabl
go 4 && попадаем на 4 запись, три пропущены..:-)
do while !eof()
x=0
for k=1 to 200
pole="tabl.s"+alltrim(k)
x=x+evaluate(x)
endfor
skip
enddo
endfor
...
Рейтинг: 0 / 0
Как сложить поля в таблицах
    #38175825
94
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
94
Гость
q1w1e1, Думаю так сложновато, поэтому решила сначала из всех 12-ти таблиц взять нужное и в один курсор, а уже как в том топике кросс-таблицу сформировать. Просто хотела бы знать этот код сделает все правильно или нет? Прошу ответить Да или Нет. :) а то в голове каша будет у меня

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
nSizeCell=50
nSizeName=90

SELECT code, lpu FROM pac_foms_issleds1 WHERE excluded=.f.;
	union all (SELECT code, lpu FROM pac_foms_issleds2 WHERE excluded=.f.);
	union all (SELECT code, lpu FROM pac_foms_issleds3 WHERE excluded=.f.);
	union all (SELECT code, lpu FROM pac_foms_issleds4 WHERE excluded=.f.);
	union all (SELECT code, lpu FROM pac_foms_issleds5 WHERE excluded=.f.);
	union all (SELECT code, lpu FROM pac_foms_issleds6 WHERE excluded=.f.);
	union all (SELECT code, lpu FROM pac_foms_issleds7 WHERE excluded=.f.);
	union all (SELECT code, lpu FROM pac_foms_issleds8 WHERE excluded=.f.);
	union all (SELECT code, lpu FROM pac_foms_issleds9 WHERE excluded=.f.);
	union all (SELECT code, lpu FROM pac_foms_issleds10 WHERE excluded=.f.);
	union all (SELECT code, lpu FROM pac_foms_issleds11 WHERE excluded=.f.);
	union all (SELECT code, lpu FROM pac_foms_issleds12 WHERE excluded=.f.);
	INTO CURSOR curData
  
SELECT DISTINCT '00000    Номер ЛПУ' AS IdRow, CHRTRAN(STR(t1.lpu,3),' ','0') AS idCol, ;
	PADR(LTRIM(STR(t2.lpu)),nSizeCell) AS mark ;
	FROM curData t1 INNER JOIN lpu t2 ON t1.lpu=t2.lpu INTO CURSOR LpuNumbers
 
SELECT DISTINCT '00000    ЛПУ направившие' AS IdRow, CHRTRAN(STR(t1.lpu,3),' ','0') AS idCol, ;
	PADR(t2.nam,nSizeCell) AS mark ;
	FROM curData t1 INNER JOIN lpu t2 ON t1.lpu=t2.lpu INTO CURSOR LpuNames
  
SELECT DISTINCT '00000    Код ЛПУ ФОМС' AS IdRow, CHRTRAN(STR(t1.lpu,3),' ','0') AS idCol, ;
	PADR(t2.fomslpu,nSizeCell) AS mark ;
	FROM curData t1 INNER JOIN lpu t2 ON t1.lpu=t2.lpu INTO CURSOR LpuFoms
 
SELECT PADR(t1.code+'    '+NVL(t2.name_issl,''),nSizeName) AS idRow, CHRTRAN(STR(t1.lpu,3),' ','0') as idCol, ;
	PADR(LTRIM(STR(t1.mark)),nSizeCell) as mark ;
	FROM (SELECT t0.code, t0.lpu, COUNT(*) as mark FROM curData t0 GROUP BY 1,2) t1 ;
	LEFT JOIN issled t2 ON t1.code=t2.shifr INTO CURSOR NameIssleds
  
SELECT * FROM LpuNumbers ;
	UNION ;
	select * FROM LpuNames ;
	UNION ;
	select * FROM LpuFoms ;
	UNION ;
	select * FROM NameIssleds INTO CURSOR curTempD

DO vfpxtab.prg WITH 'curTemp',,.f.,,1,2,3,,,.f.

SELECT curTemp
UPDATE curTemp SET Idrow=SUBSTR(Idrow,10)

SELECT curtemp
brow

...
Рейтинг: 0 / 0
Как сложить поля в таблицах
    #38176474
Людмila
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
94 И это надо не разово, а каждый год чтобы делалось
А мне вот это очень понравилось!
...
Рейтинг: 0 / 0
Как сложить поля в таблицах
    #38176588
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
94Просто хотела бы знать этот код сделает все правильно или нет? Прошу ответить Да или Нет. :)
Да/Нет никто не ответит, т.к. никто тут не будет вдумываться в глубинный смысл твоей писанины. К тому же исходных данных недостаточно чтоб вдумываться.
Учись сама понимать как оно работает. Именно за это тебе зп платят.

Могу сказать "Да" если замена этого
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
SELECT code, lpu FROM pac_foms_issleds1 WHERE excluded=.f.;
	union all (SELECT code, lpu FROM pac_foms_issleds2 WHERE excluded=.f.);
	union all (SELECT code, lpu FROM pac_foms_issleds3 WHERE excluded=.f.);
	union all (SELECT code, lpu FROM pac_foms_issleds4 WHERE excluded=.f.);
	union all (SELECT code, lpu FROM pac_foms_issleds5 WHERE excluded=.f.);
	union all (SELECT code, lpu FROM pac_foms_issleds6 WHERE excluded=.f.);
	union all (SELECT code, lpu FROM pac_foms_issleds7 WHERE excluded=.f.);
	union all (SELECT code, lpu FROM pac_foms_issleds8 WHERE excluded=.f.);
	union all (SELECT code, lpu FROM pac_foms_issleds9 WHERE excluded=.f.);
	union all (SELECT code, lpu FROM pac_foms_issleds10 WHERE excluded=.f.);
	union all (SELECT code, lpu FROM pac_foms_issleds11 WHERE excluded=.f.);
	union all (SELECT code, lpu FROM pac_foms_issleds12 WHERE excluded=.f.);
	INTO CURSOR curData



на это
Код: sql
1.
2.
SELECT code, lpu FROM pac_foms_issleds1 WHERE excluded=.f.;
	INTO CURSOR curData



даст правильный отчет за 1 месяц.

Если даст, то за 12 месяцев тоже правильно.
...
Рейтинг: 0 / 0
Как сложить поля в таблицах
    #38176696
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Александр1986AndreTM, там WHERE excluded=.f. больше же нету критериев для отбора. все строки должны попасть, в котором поле excluded=false.Пойми такую вещь, что WHERE там может быть каким угодно... А вот такое:
Код: sql
1.
SELECT code, lpu, COUNT(*) AS Mark FROM pac_foms_issleds ... GROUP BY 1,2 ... INTO CURSOR curData

позволит сразу повторно не строить подзапрос в последнем селекте по ячейкам, и выглядеть окончание там будет примерно так:
Код: sql
1.
2.
3.
4.
SELECT PADR(t1.code+'    '+NVL(t2.name_issl,''),nSizeName) AS idRow, CHRTRAN(STR(t1.lpu,3),' ','0') as idCol, ;
 PADR(LTRIM(STR(t1.mark)),nSizeCell) as mark ;
 FROM curData t1 LEFT JOIN issled t2 ON t1.code=t2.shifr ;
INTO CURSOR curTempD


Просто в Фоксе сложновато с CTE...
...
Рейтинг: 0 / 0
Как сложить поля в таблицах
    #38176809
GermanGM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
94, если Вам для работы это нужно, то вот:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
#define CRLF CHR(13)+CHR(10)
#define True .t.
#define False .t.
set talk off
set safety off
close data all

nTableCount=3
***************************
SELECT 0
create table t1 (c1 C (10),c2 C(10),c3 C(10),c4 C(10))
insert into t1 value([],[Иванов],[Петров],[Сидоров])
insert into t1 value([математика],[1],[2],[3])
insert into t1 value([русский],[10],[20],[30])
insert into t1 value([литература],[10],[20],[30])
insert into t1 value([химия],[2],[20],[30])
use

SELECT 0
create table t2 (c1 C (10),c2 C(10),c3 C(10),c4 C(10))
insert into t2 value([],[Петров],[Сидоров],[Иванов])
insert into t2 value([химия],		[2],[20],[30])
insert into t2 value([литература],	[10],[20],[30])
insert into t2 value([математика],	[1],[2],[3])
insert into t2 value([русский],		[10],[20],[30])
USE

SELECT 0
create table t3 (c1 C (10),c2 C(10),c3 C(10),c4 C(10))
insert into t3 value([],[Отличник],[Сидоров],[Казлов])
insert into t3 value([математика],[1],[2],[3])
insert into t3 value([немецкий],[10],[20],[30])
USE
*************************** пример t1-t3. заменить на реальные имена таблиц
FOR nCounter=1 TO nTableCount
	USE [t]+TRANSFORM(nCounter) IN 0
next

f=FIELD(1)
com = ""

FOR nCounter=1 TO nTableCount
	com = com + IIF(EMPTY(com),"","UNION ")+" SELECT DISTINCT &F Name FROM t"+TRANSFORM(nCounter)+IIF(EMPTY(com)," INTO CURSOR PREDMET","")+" WHERE !EMPTY(&F) "
NEXT
&com

SELECT t1
COPY STRUCTURE exte TO tmp

USE tmp IN 0

com=[]
for nCounter=1 to nTableCount
	com=com+"go top in t"+TRANSFORM(nCounter)+CRLF
NEXT

for nCounter=1 to nTableCount
	com = com + IIF(nCounter>1,[ UNION ],[])+" SELECT EVALUATE([t"+TRANSFORM(nCounter)+".]+field_name) as FIO FROM tmp "+IIF(nCounter=1,[ INTO cursor STUDENT ],[])
NEXT
EXECSCRIPT(com)
SELECT student
INDEX on FIO TAG FIO
SELECT PREDMET
INDEX on Name TAG Name

SELECT 0
CREATE TABLE rez (PREDMET C(10),STUDENT C(10),KOLVO N(10))

FOR nCounter=1 TO nTableCount
	SELECT ([t]+TRANSFORM(nCounter))
	GO top
	SCATTER TO stud
	SKIP
	SCAN WHILE true
		SCATTER TO pr
		RowName=[p]+IIF(SEEK(pr(1),[PREDMET]),TRANSFORM(RECNO('predmet')),[0])
		FOR nC = 2 TO fcount()
			ColName = [s]+IIF(SEEK(stud(nC),[STUDENT]),TRANSFORM(RECNO([student])),[0])
			INSERT INTO rez VALUES (RowName,ColName,VAL(pr(nC)))
		NEXT
	ENDSCAN
NEXT
SELECT rez

SELECT predmet,student,SUM(kolvo) as kolvo FROM rez INTO CURSOR rezult GROUP BY 1,2

SELECT rezult
FOR nCounter=1 TO nTableCount
	USE IN ('t'+TRANSFORM(nCounter))
NEXT
USE IN Rez
SELECT Rezult
DO (_GENXTAB) WITH 'cross',,,,1,2,3,,,

SELECT tmp
GO top
SCATTER NAME rec
DO while RECCOUNT()<RECCOUNT([student])
	APPEND BLANK
	GATHER NAME rec
ENDDO
SCAN
	replace field_name WITH IIF(RECNO()=1,[PREDM_FIO],[FIO]+TRANSFORM(RECNO()))
ENDSCAN

replace ALL field_len WITH 10,field_dec WITH 0,field_type WITH [C]
SELECT 0
CREATE rez FROM tmp
SELECT * FROM student INTO ARRAY st
SELECT rez
APPEND blank
gather FROM st
SELECT cross
SCAN
	SCATTER TO pr
	GO VAL(subs(pr(1),2)) IN predmet
	pr(1)=predmet.name
	FOR nCounter=2 TO ALEN(pr)
		pr(nCounter)=STR(pr(nCounter))
	NEXT
	INSERT INTO rez FROM ARRAY pr
ENDSCAN
SELECT rez
GO top
BROWSE nowa



Если что-то учебное, то, конечно, фтопку, ибо бред. Зато не зависит от порядка предметов/ФИО в таблицах, лишь бы полей в них было менее 255
...
Рейтинг: 0 / 0
Как сложить поля в таблицах
    #38176861
94
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
94
Гость
GermanGM, Спасибо, я ваш код для себя попробую посмотрю что получится. Но я выше приведенный код взяла и вроде бы нормально. Только курсоре после объединения 12-ти таблиц и в екселе разница получилась на 12. Не знаю почему. в курсоре CurData 327470 записей а в экселе сумма всех 327458.
...
Рейтинг: 0 / 0
8 сообщений из 83, страница 4 из 4
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Как сложить поля в таблицах
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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