|
Select?????
|
|||
---|---|---|---|
#18+
Всем добрый день. Я только-только стала работать на 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'ами? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2008, 10:05 |
|
Select?????
|
|||
---|---|---|---|
#18+
Если заранее известны 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. Хранить числовые значения в символьном виде не хорошо ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2008, 21:39 |
|
|
start [/forum/topic.php?fid=41&tid=1587020]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
53ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
41ms |
get tp. blocked users: |
1ms |
others: | 332ms |
total: | 473ms |
0 / 0 |