powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Добавление столбцов
25 сообщений из 34, страница 1 из 2
Добавление столбцов
    #38173697
Добрый вечер! Не могу решить такую задачу.
Есть таблица pac_foms_issleds, в котором есть поля: Lpu, Excluded,Id,Code. Там хранятся мед.услуги за какой-то период
Есть таблица Lpu с полями Lpu,Nam,Fomslpu. тут хранятся названия ЛПУ
И третья таблица issled с полями Nam_issl, shifr. А тут хранятся названия перечень всех мед.услуг

Нужно в курсор или таблицу вывести следующую информацию типа матрицы следующим образом. В первом столбце Вывести все меду.слуги из issled такие которые есть также в pac_foms_issleds т.е. где поля code И shifr одинаковы. Это понятно. Затем надо в каждом столбце выводить каждое ЛПУ добавляя об ЛПУ такие три строчки: Nam,Lpu,Fomslpu. т.е. матрица где строки равнымед.услугам из issled, а столбцы ЛПУ. как на рисунке:
...
Рейтинг: 0 / 0
Добавление столбцов
    #38173698
подскажите как решить
...
Рейтинг: 0 / 0
Добавление столбцов
    #38173699
Я так понимаю надо сделать цикл пока не закончится табдила LPU создавать новый столбец и добавлять три новые записи туда, но не знаю как реализовать в фокспро
...
Рейтинг: 0 / 0
Добавление столбцов
    #38173754
Никто не может помочь хоть часть задачи решить?
...
Рейтинг: 0 / 0
Добавление столбцов
    #38173769
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Воспользуйтесь CrossTable, которую недавно обсуждали.
Сделайте курсор-источник с тремя полями - Услуга, ЛПУ, Отметка, добавьте заголовки для ЛПУ, и затем постройте кросс... Типа такого:
Код: sql
\r\nSELECT PADC(\'Name=\'+t2.nam,20) AS name, t2.lpu AS lpu, \'X\' AS mark  ;\r\n FROM pac_forms_issleds t1 INNER JOIN lpu t2 ON t1.lpu=t2.lpu ;\r\nUNION ;\r\nSELECT \'Fomsplu=\'+t4 AS name, t4.lpu AS lpu, \'X\' AS mark  ;\r\n FROM pac_forms_issleds t3 INNER JOIN lpu t4 ON t3.lpu=t4.lpu ;\r\nUNION ;\r\nSELECT t7.nam_issled as name, t6.lpu as lpu, \'X\' AS mark  ;\r\n FROM pac_forms_issleds t5 INNER JOIN lpu t6 ON t5.lpu=t6.lpu INNER JOIN issled t7 ON t5.code=t7.shifr ;\r\nINTO CURSOR curData\r\n\r\nDO (_GENXTAB) WITH \'curTemp\',,.t.,,1,2,3,,,.f.\r\n
\r\n
...
Рейтинг: 0 / 0
Добавление столбцов
    #38173776
AndreTM, Услуга, ЛПУ, Отметка это какие поля вы имеете ввиду? Не судите строго, просто не понимаю как сделать такую таблицу или курсор типа матрицы
...
Рейтинг: 0 / 0
Добавление столбцов
    #38173787
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы по ссылке ходили? Прочитали? Хелп почитали?
Просто выражение "сделать курсор типа матрицы" говорит о том, что вы не понимаете сути... Мы не делаем матрицы - её сделает нам VFPXTAB.PRG , а наше дело - подготовить таблицу из трех полей с "описанием" непустых ячеек матрицы, где каждая строка - это "заголовок/код строки в будущей матрице", "заголовок/код столбца в будущей матрице", "содержимое ячейки строка-столбец иатрицы".
...
Рейтинг: 0 / 0
Добавление столбцов
    #38173797
AndreTM, Я прошел по ссылке, но не понял как там организовано это все. Ранее не сталкивался с такой задачей, поэтому не понимаю как реализовать. Вот содержимое таблицы наглядно. по этому примеру вы не могли бы сказать какую таблицу нужно подготовить?
...
Рейтинг: 0 / 0
Добавление столбцов
    #38173799
В таблице pac_foms_issleds каждая строка есть одна медуслуга и нужно заполнить результирующий курсор количеством Например мед. услуга в больнице 1 была 5 раз на пересечении чтобы 5 было
...
Рейтинг: 0 / 0
Добавление столбцов
    #38173810
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я не поленился, привел вам пример, построенный на ваших данных. Вы его запускали?
Только в примере строится табличка, показывающая факт оказания услуги. Ну а чтобы посчиталось количество - надо просто творчески переработать наполнение поля mark (и последний select )... Мне это делать за вас?
...
Рейтинг: 0 / 0
Добавление столбцов
    #38173816
AndreTM, Запустил пишет Column T4 not found
...
Рейтинг: 0 / 0
Добавление столбцов
    #38173821
Что-то типа такого мне нужно было бы. Если бы немного хоть разбирался в кросс-таблицах, о которых вы говорите я бы может что-то пытался сделать, но я от вас впервые узнал что такое кросс таблицы
...
Рейтинг: 0 / 0
Добавление столбцов
    #38173824
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Александр1986AndreTM, Запустил пишет Column T4 not found

И? Разберите и найдите, что не нравится. Я вот вижу, что должно быть написано t4.fomsplu - ищите, в каком месте :)

И я же спросил - надо всё сделать за вас? Ибо . Я понимаю, что вы не студент, что вам некогда... Но и здесь никто не подписывался делать всё за вас
...
Рейтинг: 0 / 0
Добавление столбцов
    #38173831
AndreTM, Я исправил в нескольких местах немного неверные названия вы написали. В курсор выводится не так как нужно. В первом столбце подряд идут и названия мед.услуг и названия ЛПУ и Fomslpu
Вот что получилось я просто строки друг под друга подвел чтобы видно было что в первом столбце выводится. А мне нужно было бы как я на картинке выше показал
...
Рейтинг: 0 / 0
Добавление столбцов
    #38173834
Т.е. названия мед.услуг, поле fomslpu и названия ЛПУ подряд идут совсем не так
...
Рейтинг: 0 / 0
Добавление столбцов
    #38173848
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ага, ну исходник немного не тот сделан был: Name= и Fomsplu= должны быть в поле Mark, а не Name
Так ведь у меня нет образцов содержимого ваших баз, чтобы тестировать (и если вы думаете, что я буду руками что-то там набивать - то ...)
...
Рейтинг: 0 / 0
Добавление столбцов
    #38173859
AndreTM, Вот таблицы сами.
...
Рейтинг: 0 / 0
Добавление столбцов
    #38173868
AndreTMName= и Fomsplu= должны быть в поле Mark, а не Name

С этими полями не совсем понял. Имеете ввиду переставить местами что ли
...
Рейтинг: 0 / 0
Добавление столбцов
    #38173880
Изменил поля получилось так:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
SELECT 'X' AS name, t2.lpu AS lpu, PADC('Name='+t2.nam,20) AS mark  ;
 FROM pac_foms_issleds t1 INNER JOIN lpu t2 ON t1.lpu=t2.lpu ;
UNION ;
SELECT 'X' AS Fomsplu1, t4.lpu AS lpu, 'Fomsplu='+t4.fomslpu AS mark  ;
 FROM pac_foms_issleds t3 INNER JOIN lpu t4 ON t3.lpu=t4.lpu ;
UNION ;
SELECT t7.name_issl as name, t6.lpu as lpu, 'X' AS mark  ;
 FROM pac_foms_issleds t5 INNER JOIN lpu t6 ON t5.lpu=t6.lpu INNER JOIN issled t7 ON t5.code=t7.shifr ;
INTO CURSOR curData

DO (_GENXTAB) WITH 'curTemp',,.t.,,1,2,3,,,.f.
SELECT curtemp
brow



Не пойму куда делось поле Fomslpu. Можно сделать так как я на картинке красным отметил?
...
Рейтинг: 0 / 0
Добавление столбцов
    #38173919
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы образцы файлов дали такие, что выборка нулевая получается ( pac_foms_issleds.code нет в issled.shifr )
...
Рейтинг: 0 / 0
Добавление столбцов
    #38173925
AndreTM, Вот ссылка на архив там полные таблицы(
...
Рейтинг: 0 / 0
Добавление столбцов
    #38173926
...
Рейтинг: 0 / 0
Добавление столбцов
    #38173961
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пробуйте...
Код: 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.
nSizeCell=20
nSizeName=40

SELECT code, lpu FROM pac_foms_issleds WHERE BETWEEN(dat_obs,{^2012-01-10},{^2012-01-15}) INTO CURSOR curData

SELECT DISTINCT PADR('00000 01 LPU=',nSizeName) 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 ;
UNION ;
SELECT DISTINCT PADR('00000 02 Name=',nSizeName) 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 ;
UNION ;
SELECT DISTINCT PADR('00000 03 Fomslpu=',nSizeName) 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 ;
UNION ;
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 curTempD

DO (_GENXTAB) WITH 'curTemp',,.f.,,1,2,3,,,.f.

Для оптимизации - можно еще предложить вариант: сначала создать курсор с нужными размерами полей, заполнить его данными строк заголовка (не используя UNION), а затем объединить с выборкой данных для ячеек...
...
Рейтинг: 0 / 0
Добавление столбцов
    #38173967
AndreTM, Если вам не сложно не могли бы вы прокомментировать что делается в каждом из этих кусков кода?

Код: sql
1.
2.
3.
4.
SELECT DISTINCT PADR('00000 01 LPU=',nSizeName) 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 ;
UNION ;


Код: 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 (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 ;


Код: sql
1.
DO (_GENXTAB) WITH 'curTemp',,.f.,,1,2,3,,,.f.



А именно про функцию PADR для данного примера и DO (_GENXTAB) WITH 'curTemp',,.f.,,1,2,3,,,.f.
...
Рейтинг: 0 / 0
Добавление столбцов
    #38173970
Кстати, спасибо большое я сейчас посмотрю какой будет результат, а потом почитаю про непонятные места в хелпе
...
Рейтинг: 0 / 0
25 сообщений из 34, страница 1 из 2
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Добавление столбцов
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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