powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Определение возраста
25 сообщений из 187, страница 5 из 8
Определение возраста
    #38026289
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дима1991нужно первый вариант использовать как подзапрос в другом запросе который будет делать выборку по условию where checkmkb=.t. ?Да.
Или дописать к исходному запросу это же условие, только в секции having.
...
Рейтинг: 0 / 0
Определение возраста
    #38026304
Дима1991
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tanglir, Так правильно? Только в результате пустая выборка получается

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
SELECT distinct u.ds as MKB;
 ,cast(icase(alltrim(hediag.compr)=='>',pacient.agep>hediag.age;
   ,alltrim(hediag.compr)=='<=',pacient.agep<=hediag.age;
   ,alltrim(hediag.compr)=='<',pacient.agep<hediag.age;
   ,alltrim(hediag.compr)=='>=',pacient.agep>=hediag.age;
   ,.null.;
  ) as logical;
 ) as CheckMKB;
from pacient p ;
join usl u on p.spolis=u.spolis and p.npolis=u.npolis;
left join hediag h on chrtran(alltrim(u.ds),'.','')==alltrim(h.code) ;
HAVING checkmkb=.t.
...
Рейтинг: 0 / 0
Определение возраста
    #38026312
Дима1991
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если писать просто запрос

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
SELECT u.ds as MKB;
 ,cast(icase(alltrim(hediag.compr)=='>',pacient.agep>hediag.age;
   ,alltrim(hediag.compr)=='<=',pacient.agep<=hediag.age;
   ,alltrim(hediag.compr)=='<',pacient.agep<hediag.age;
   ,alltrim(hediag.compr)=='>=',pacient.agep>=hediag.age;
   ,.null.;
  ) as logical;
 ) as CheckMKB;
from pacient p ;
join usl u on p.spolis=u.spolis and p.npolis=u.npolis;
left join hediag h on chrtran(alltrim(u.ds),'.','')==alltrim(h.code) 



то в результате выводятся все случаи услуг и поле chemkb в котором все значения равны .NULL. почему везде null если есть услуги у которых возраст пациента соответствует коду мкб
...
Рейтинг: 0 / 0
Определение возраста
    #38026314
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дима1991, запрос правильный. Ну а выборка... попробуйте создать таблицы с такими записями, чтобы точно были записи в результате, и выполните запрос на них. Если не получится - эти тестовые таблицы выложите тут.
ЗЫ. а может, splolis/npolis - не числа, а строки? тогда оберните их в аллтрим и сравнивайте с помощью "==".
...
Рейтинг: 0 / 0
Определение возраста
    #38026321
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дима1991то в результате выводятся все случаи услуг и поле chemkb в котором все значения равны .NULL.Значит, что-то с джойном таблицы "хедиаг". Давайте сюда таблицу хедиаг и по паре строк из таблиц "пациент", "услуга" (тех, в которых точно должно быть соответствие).
...
Рейтинг: 0 / 0
Определение возраста
    #38026409
Дима1991
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tanglir, spolis и npolis это строки. А на счет hediag в таблице в некоторых случаях поле compr пустое. Может поэтому? таблице hediag нельзя ничего менять.
...
Рейтинг: 0 / 0
Определение возраста
    #38026434
Дима1991
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
что-то у меня фокспро глючит не смог удалить ненужные записи из hediag поэтому дам ссылку чтобы скачать архив. Там Hediag,pacient и usl таблицы

Ссылка
...
Рейтинг: 0 / 0
Определение возраста
    #38027003
Дима1991
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А нельзя ли сделать так? Проверить поля hediag.age и hediag.compr. Далее случай 1, если поле compr=">" и возраст пациента больше чем hediag.age, то проверить соответствует ли код МКБ этому возрасту, если да то занести эту услугу в курсор, если нет перейти ко второму случаю?
...
Рейтинг: 0 / 0
Определение возраста
    #38027519
frms
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
gomo(д_рожд, 12*кол_во_лет) < дата_границы

или

*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
FUNCTION возраст
*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
PARAMETERS _дат1, _дат2
if _дат2<_дат1
RETURN 'Не верно заданы даты! (Дата рождения должна быть меньше даты определения возраста)'
endif
_gg =YEAR(_дат2) - YEAR(_дат1)
_mm =MONTH(_дат2)- MONTH(_дат1)
_dd =DAY(_дат2) - DAY(_дат1)

IF _dd<0
_mm=_mm-1
ENDIF
IF _mm<0
_gg=_gg-1
_mm=12+_mm
ENDIF

_xxx=IIF(INLIST(VAL(RIGHT(STR(_gg,2),1)),1,2,3,4),"г.","л.")
_gg=IIF(_gg=0,"",STR(_gg,2)+_xxx)
_mm=IIF(_mm=0,"",STR(_mm,2)+"мес.")
_возраст=_gg+' '+_mm
***----------------------------------------------------------------------
IF (ALLT(_возраст)="1мес.".AND._dd<0).OR.EMPTY(_возраст)
_кол_дней=ALLT(STR(_дат2-_дат1))
_назв_д=""
DO CASE
CASE _кол_дней="11".OR._кол_дней="12".OR._кол_дней="13".OR._кол_дней="14"
_назв_д="дней"
CASE SUBSTR(_кол_дней,LEN(_кол_дней))="1"
_назв_д="день"
CASE SUBSTR(_кол_дней,LEN(_кол_дней))="2"
_назв_д="дня"
CASE SUBSTR(_кол_дней,LEN(_кол_дней))="3"
_назв_д="дня"
CASE SUBSTR(_кол_дней,LEN(_кол_дней))="4"
_назв_д="дня"
OTHERWISE
_назв_д="дней"
ENDCASE
_возраст=_кол_дней+_назв_д
ENDIF
RETURN _возраст
...
Рейтинг: 0 / 0
Определение возраста
    #38027845
Дима1991
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Выяснилось, что код не совсем правильно проводит выборку. Я оставил в таблице hediag 5-6 записей и в полях compr указал все возможные условия (>,<,>=,<=). Указал возрасты в поле age. Код такой:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
SELECT u.ds as MKB;
   ,cast(icase(alltrim(hediag.compr)=='>',pacient.agep>hediag.age;
   ,alltrim(hediag.compr)=='<=',pacient.agep<=hediag.age;
   ,alltrim(hediag.compr)=='<',pacient.agep<hediag.age;
   ,alltrim(hediag.compr)=='>=',pacient.agep>=hediag.age;
   ,.null.;
  ) as logical;
 ) as CheckMKB;
from pacient p ;
join usl u on ALLTRIM(p.spolis)==ALLTRIM(u.spolis) and ALLTRIM(p.npolis)==ALLTRIM(u.npolis);
left join hediag h on chrtran(alltrim(u.ds),'.','')==alltrim(h.code) 



Когда запускаю программу и нажимаю кнопку для выполнения выборки в результате выводятся все значения а в поле checkmkb везде стоит F. Далее у меня стоит еще одна кнопка, которая отображает услуги, пациентов, и случаи, когда ее нажимаю отображает все и если потом нажать ту же кнопку которая выполняет вышеуказанный код, то в поле Checkmkb уже везде T.
Помогите разобраться в чем причина?
...
Рейтинг: 0 / 0
Определение возраста
    #38027855
Дима1991
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Т.е. код не выводит правильно. В hediag есть код МКБ который соответствует пациенту возраст, которого <=1 года, а в таблице пациент у пациента с таким кодом возраст больше чем 1 год. Следовательно в этом поле должен был checkmkb иметь значение F, но он выдает то T то F
...
Рейтинг: 0 / 0
Определение возраста
    #38027862
Дима1991
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Проверьте у себя пожалуйста.. Вы говорите код почти готовый, но вот так по разному выводит. Выкладываю весь проект и файлы. (Файлы скинуть в корень диска C)
...
Рейтинг: 0 / 0
Определение возраста
    #38027975
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дима1991Проверьте у себя пожалуйста..Проверил.
Вот здесь 13409609 вы писалиДима1991дополнил код tanglir условиями которые вообще могут быть в hegiag.compr получилось так: - так вот, получилось совсем не то, что было изначально.
Вот здесь 13424847 уже я сам сказал
tanglirДима1991, запрос правильный., но ошибся - запрос всё-таки неправильный, просто я тогда не заметил этот косяк (в глаза он не бросается).

Разберитесь с алиасами, и всё станет нормально. Хинт - смотрите мой запрос в той теме, ищите отличия от своего в селект-части.
...
Рейтинг: 0 / 0
Определение возраста
    #38027989
Дима1991
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tanglir, В какой теме искать ваш код? можно ссылку? А то столько кодов тут, не разберешь какой из них подходящий. И еще вопрос. Ваш код на который вы указываете правильный или косяк есть?
...
Рейтинг: 0 / 0
Определение возраста
    #38028007
Дима1991
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вот ваш код в другой теме:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
select p.что_нибудь,u.что_нибудь
 ,cast(icase(alltrim(h.compr)=='>',p.agep>h.age
   ,alltrim(h.compr)=='<=',p.agep<=h.age
   ,.null.
  ) as logical
 ) as CheckMKB
from pacient p 
join usl u on p.spolis=u.spolis and p.npolis=u.npolis
left join hediag h on chrtran(alltrim(u.ds),'.','')==alltrim(h.code)



вот код, который я изменил под свой:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
select p.npolis,u.ds ;
 ,cast(icase(alltrim(h.compr)=='>',p.agep>h.age ;
   ,alltrim(h.compr)=='<=',p.agep<=h.age ;
   ,alltrim(h.compr)=='<',p.agep<h.age ;
   ,alltrim(h.compr)=='>=',p.agep>=h.age ;
   ,.null. ;
  ) as logical ;
 ) as CheckMKB ;
from pacient p ;
join usl u on p.spolis=u.spolis and p.npolis=u.npolis ;
left join hediag h on alltrim(u.ds)==chrtran(alltrim(h.code),'.','') 



Но по-прежнему во всех полях выдает F. Вы можете у себя проверить и выложить рабочий код? Уже сколько неделя прошла а я с места не сдвинулся
...
Рейтинг: 0 / 0
Определение возраста
    #38028100
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дима1991Но по-прежнему во всех полях выдает F.А у меня - нет (см. рисунок)
Так что теперь смотрите у себя, я в запросе тоже ничего больше не менял.
Ну, кроме путей к файлам, ибо у вас с путями швах.
И отдельное вам огромное спасибо за кривой рид эвентс - пропишите уже clear events хоть в unload формы, что ли...

Дима1991Ваш код на который вы указываете правильный или косяк есть?Правильный.
Дима1991Уже сколько неделя прошла а я с места не сдвинулсяИ кто в этом виноват?
...
Рейтинг: 0 / 0
Определение возраста
    #38028122
Дима1991
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tanglir, а выложите этот проект пожалуйста, а то что-то непонятно. Вроде один и тот же код, только пути разные
...
Рейтинг: 0 / 0
Определение возраста
    #38028161
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Говорю же - менял только запрос, вот он
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
SELECT  p.spolis,p.npolis,h.code,p.agep,h.compr,h.age,u.ds as MKB;
   ,cast(icase(alltrim(h.compr)=='>',p.agep>h.age;
   ,alltrim(h.compr)=='<=',p.agep<=h.age;
   ,alltrim(h.compr)=='<',p.agep<h.age;
   ,alltrim(h.compr)=='>=',p.agep>=h.age;
   ,.null.;
  ) as logical;
 ) as CheckMKB;
from pacient p ;
join usl u on ALLTRIM(p.spolis)==ALLTRIM(u.spolis) and ALLTRIM(p.npolis)==ALLTRIM(u.npolis);
left join hediag h on chrtran(alltrim(u.ds),'.','')==alltrim(h.code) 

, остальное всё то же самое.
...
Рейтинг: 0 / 0
Определение возраста
    #38028198
Дима1991
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tanglir, у меня фокспро глючит кажется жестко.. я ваш код вставил он даже указанные поля не выводит в результат.. Заново создам проект и посмотрю сейчас
...
Рейтинг: 0 / 0
Определение возраста
    #38028473
Дима1991
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да уж когда вывожу одно поле из ds.usl то везде выдает F , а когда ваш код вписал нормально выдает. Да и фокс глючит пришлось заново проект создавать а иначе не выдавал. Теперь если я захожу оставить только те услуги для которых код МКБ не соответствует возрасту пациента я могу написать

Код: sql
1.
HAVING checkmkb=.f.

или
Код: sql
1.
HAVING checkmkb=.t.


и будет выводить только те которые соответствуют или не соответствуют да? checkmkb если False значит не соответствует. так ведь?
...
Рейтинг: 0 / 0
Определение возраста
    #38028486
Дима1991
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Обнаружил ошибку.

Вот в таблице hediag код E343 соответствует пациентам у которых возраст < или = 1. У пациента с услугой у которого код Е343 возраст 6 и 15 лет. А в результате выдается эти услуги как те у которых код мкб не соответствует возрасту. А тут в чем загвоздка?

дополнил код tanlir'a прописав после всего
Код: sql
1.
HAVING checkmkb=.f.
...
Рейтинг: 0 / 0
Определение возраста
    #38028494
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дима1991фокс глючит пришлось заново проект создаватьЭто ваш код в каком-то месте глючит.
Дима1991так ведь?да.
...
Рейтинг: 0 / 0
Определение возраста
    #38028503
Дима1991
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ой )) или это я запутался))
...
Рейтинг: 0 / 0
Определение возраста
    #38028504
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дима1991Обнаружил ошибку.Хватит уже, а?
авторв таблице hediag код E343 соответствует пациентам у которых возраст < или = 1Это верно.
авторУ пациента с услугой у которого код Е343 возраст 6 и 15 летНу пусть будет такой пациент.
авторА в результате выдается эти услуги как те у которых код мкб не соответствует возрастуИ? если услуга соответствует возрасту менее одного года , то, ясен хрен, для человека с возрастом более одного года она будет признанна неподходящей...
...
Рейтинг: 0 / 0
Определение возраста
    #38028506
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
*признана
...
Рейтинг: 0 / 0
25 сообщений из 187, страница 5 из 8
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Определение возраста
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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