powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Select?????
2 сообщений из 2, страница 1 из 1
Select?????
    #35681030
Всем добрый день. Я только-только стала работать на VF. Сейчас есть срочная работа. Смысл ее состоит в том, что одну таблицу нужно перевести в другую.


1 шаг. ВЫборка из первой таблицы baza1
select distinct sum(val(z_kol_v)) as z_kol_v, sum(val(z_kol_t)) as z_kol_t,;
z_adm_kd as z_adm_kd, z_gosud_n as z_gosud_n, z_imya as z_imya from baza1 ;
group by z_adm_kd,z_gosud_n,z_imya ;
into dbf tmp_z_all

2 шаг. Заполнение второй таблицы. Иначе говоря, таблицу с 5 полями, нужно перевести в таблицу с 15 полями.
У меня получилось так.

sele table_vt (таблица с 15 полями)
go top
********************
sele tmp_z_all
index on z_gosud_n to proba
go top
do while !eof()
sele tmp_z_all
z1=tmp_z_all.z_gosud_n
z2='w'+tmp_z_all.z_adm_kd
z3='t'+tmp_z_all.z_adm_kd
z4=tmp_z_all.z_imya
sele table_vt
go top
locate for val(table_vt.zgn)=val(z1) and table_vt.z_imya==z4
if !found()
sele table_vt
append blank
repl zgn with tmp_z_all.z_gosud_n, z_imya with tmp_z_all.z_imya
endif
repl &z2 with tmp_z_all.z_kol_v, &z3 with tmp_z_all.z_kol_t
sele tmp_z_all
skip
enddo

Сама понимаю, что получилась чушь собачья. Но как сделать так, чтобы все было написано красиво и аккуратно. И вообще, можно эту выборку сделать один-двумя select'ами?
...
Рейтинг: 0 / 0
Select?????
    #35683065
alextashk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если заранее известны z_adm_kd и их малое количество
(например в tableVT где 15 полей 6 наборов w и t, а z_adm_kd - '1':'6')

то
* 1) Выбераем суммы по столбцам, в зависимости от z_adm_kd
SELECT DISTINCT z_gosud_n, z_imya, ;
SUM(IIF(z_adm_kd = '1', VAL(z_kol_v), 0)) AS v1,;
SUM(IIF(z_adm_kd = '1', VAL(z_kol_t), 0)) AS t1,;
SUM(IIF(z_adm_kd = '2', VAL(z_kol_v), 0)) AS v2,;
SUM(IIF(z_adm_kd = '2', VAL(z_kol_t), 0)) AS t2,;
SUM(IIF(z_adm_kd = '3', VAL(z_kol_v), 0)) AS v3,;
SUM(IIF(z_adm_kd = '3', VAL(z_kol_t), 0)) AS t3,;
SUM(IIF(z_adm_kd = '4', VAL(z_kol_v), 0)) AS v4,;
SUM(IIF(z_adm_kd = '4', VAL(z_kol_t), 0)) AS t4,;
SUM(IIF(z_adm_kd = '5', VAL(z_kol_v), 0)) AS v5,;
SUM(IIF(z_adm_kd = '5', VAL(z_kol_t), 0)) AS t5,;
SUM(IIF(z_adm_kd = '6', VAL(z_kol_v), 0)) AS v6,;
SUM(IIF(z_adm_kd = '6', VAL(z_kol_t), 0)) AS t6;
FROM baza1 ;
GROUP BY z_gosud_n, z_imya;
INTO CURSOR list_sum

* 2) Обновляем существующие записи
UPDATE table_vt SET w1 = list_sum.v1, t1 = list_sum.t1,;
w2 = list_sum.v2, t2 = list_sum.t2,;
w3 = list_sum.v3, t3 = list_sum.t3,;
w4 = list_sum.v4, t4 = list_sum.t4,;
w5 = list_sum.v5, t5 = list_sum.t5,;
w6 = list_sum.v6, t6 = list_sum.t6 ;
FROM list_sum ;
WHERE z_gosud_n+z_imya IN (SELECT z_gosud_n+z_imya FROM list_sum)

* 2) Добавляем записи
INSERT INTO table_vt (zgn, z_imya, w1, t1, w2, t2, w3, t3, w4, t4, w5, t5, w6, t6) ;
SELECT *;
FROM list_sum ;
WHERE z_gosud_n+z_imya NOT IN (SELECT z_gosud_n+z_imya FROM table_vt)

PS. На работоспособность не проверял
PPS. Хранить числовые значения в символьном виде не хорошо
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Select?????
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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