powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Определение возраста
25 сообщений из 187, страница 4 из 8
Определение возраста
    #38023160
Дима1991
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Для случая тоже самое кстати. А мне нужно чтобы выводились только те случаи или услуги в которых код МКБ соответствует возрасту.
...
Рейтинг: 0 / 0
Определение возраста
    #38023165
Дима1991
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
для услуг точнее то же самое
...
Рейтинг: 0 / 0
Определение возраста
    #38023202
Дима1991
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вот тут он же как я понимаю вычисляет поле compr равно ли ">=" если да то получается он возраст тоже пациента увеличивает? так что ли?

Код: sql
1.
icase(alltrim(hediag.compr)=='>',pacient.agep>hediag.age



так же не должно быть
...
Рейтинг: 0 / 0
Определение возраста
    #38023276
Дима1991
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если можно помогите проверить соответствие кода МКБ таким образом,а то что-то он все коды МКБ выводит: Сначала проверять эти условия, а потом уже вычислять возраст пациентов и проверять соответствие кода МКБ, я тут набросал код но он не выводит ничего

Код: sql
1.
2.
3.
4.
5.
IF hediag.compr='>='
    IF pacient.agep>=hediag.age
        *******
    endif
endif




вот мой код для того случая когда поле compr >=

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
*!*	IF hediag.compr='>='
*!*	   IF pacient.agep>=hediag.age
*!*	      SELECT pacient.fam,sluch.ds0,sluch.ds1,sluch.ds2 ;
*!*	      FROM sluch ;
*!*	      join pacient  on pacient.spolis=sluch.spolis AND pacient.npolis=sluch.npolis;
*!*	      left join hediag h on CHRTRAN(ALLTRIM(sluch.ds1),'.','')==ALLTRIM(h.code)
*!*	      ENDIF 
*!*	ENDIF
...
Рейтинг: 0 / 0
Определение возраста
    #38023282
Jonny540
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дима1991,

UDF включаешь в .prg-файл, который подключаешь командой SET PROCEDURE.
а в селекте просто вызов: Full_years(<дата_рождения>,<дата_обслед.>).
Результат обрабатываешь с помощью IIF() в том же селекте.
...
Рейтинг: 0 / 0
Определение возраста
    #38023298
Дима1991
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Jonny540, в селекте во-первых, я не понял как где его писать, а во-вторых, тот код, который мне тут написали кажется выдает все случаи, хотя нужно выводить только те случаи для которых код МКБ соответствует возрасту пациента.

я так понимаю icase Вычисляет выражение и выводит результат.
так вот если писать
Код: sql
1.
icase(alltrim(hediag.compr)=='>=',pacient.agep>hediag.age) 



он проверит является ли поле compr равным ">=" если равен то pacient.age сделает большим или равным hediag.age. Или он не так делает? но в хелпе читал работа этой функции описана так
...
Рейтинг: 0 / 0
Определение возраста
    #38023326
IgorNG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дима1991,

плохо читал. Селект ничего не делает, он отбирает записи согласно заданным условиям
...
Рейтинг: 0 / 0
Определение возраста
    #38023339
Дима1991
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
я знаю что он выбирает согласно условию. но в том коде который мне тут написали есть icase(alltrim(hediag.compr)=='>',pacient.agep>hediag.age

мне интересно что тут он делает? если поле compr='>' pacient.agep>hediag.age. Вот тут разве он не увеличивает возраст пациента?
...
Рейтинг: 0 / 0
Определение возраста
    #38023345
Дима1991
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
прошу объяснить этот кусок:

Код: sql
1.
2.
3.
4.
cast(icase(alltrim(hediag.compr)=='>',pacient.agep>hediag.age;
   ,.null.;
  ) as logical;
 ) as CheckMKB;
...
Рейтинг: 0 / 0
Определение возраста
    #38023360
IgorNG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дима1991,

И что ты из этого кода до сих пор не понял?

Выбрать записи, где hediag.compr равно '>' и pacient.agep больше hediag.age
...
Рейтинг: 0 / 0
Определение возраста
    #38023380
Дима1991
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
IgorNG, запутался я.. если так делает. то почему выводится тот случай у которого возраст пациента меньше чем возраст в hediag.age. Я в поле hediag.age прописал 45 для кода Z000, в случаях есть такой случай у которого код равен Z000 и возраст пациента 43. В код, который мне тут выложили и этот случай выводит в результатах. для услуг также
...
Рейтинг: 0 / 0
Определение возраста
    #38023686
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IgorNGВыбрать записи, где hediag.compr равно '>' и pacient.agep больше hediag.ageНет, выберутся все записи. Но там, где pacient.agep больше hediag.age, в последнем поле будет true, а где меньше - false.
...
Рейтинг: 0 / 0
Определение возраста
    #38023687
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дима1991то почему выводится тот случай у которого возраст пациента меньше чем возраст в hediag.ageсм. предыдущий пост.
...
Рейтинг: 0 / 0
Определение возраста
    #38024045
Дима1991
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tanglir, А как сделать так чтобы выводились только те записи которые соответствуют возрасту пациента? мне не нужно все выводить.. т.к. эти данные я потом буду выводить в отчет. и нужно вывести только те которые соответствуют возрасту
...
Рейтинг: 0 / 0
Определение возраста
    #38024271
Дима1991tanglir, А как сделать так чтобы выводились только те записи которые соответствуют возрасту пациента? мне не нужно все выводить.. т.к. эти данные я потом буду выводить в отчет. и нужно вывести только те которые соответствуют возрасту
Написать запрос, который использует данный запрос в качестве источника исходных данных.
Будет что-то типа:
Код: sql
1.
Select ... from (select ....) as a where a.logical = .T. 


А в Where указать, что надо отбирать только те записи, где CheckMKB.logical = true
...
Рейтинг: 0 / 0
Определение возраста
    #38024490
Дима1991
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Станислав С...кий, т.е написать такой код?

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Select sluch.ds0,ds1,ds2
from (;
SELECT distinct p.fam,p.im,p.agep as vozrast,sl.ds0 as MKB,sl.ds1 as MKB, sl.ds2 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 sluch sl on p.spolis=sl.spolis and p.npolis=sl.npolis;
left join hediag h on chrtran(alltrim(sl.ds0),'.','')==alltrim(h.code) OR  chrtran(alltrim(sl.ds1),'.','')==alltrim(h.code) OR chrtran(alltrim(sl.ds2),'.','')==alltrim(h.code)
)
as a where a.logical = .T. 



и он мне будет выводить только те случаи где код МКБ (поля ds0,ds1,ds2) соответствует возрасту пациента?
...
Рейтинг: 0 / 0
Определение возраста
    #38024503
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дима1991, ёшкин кот, ну вникните уже в смысл джойнов, в конце-то концов.

Да и к тому же что вообще за запрос у вас получился (даже если закрыть глаза на безумный джойн с хедиагом):
Код: sql
1.
2.
Select sluch.ds0,ds1,ds2
from (подзапрос) as a where a.logical = .T. 

Алиас подзапроса - "а", никаких других таблиц/курсоров во внешнем запросе нет. Откуда прикажете фоксу брать поле sluch.ds0?
Да и в самом подзапросе нет поля с именем "logical", а вы пытаетесь по нему фильтровать...
...
Рейтинг: 0 / 0
Определение возраста
    #38024865
Дима1991
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tanglir, я же с самого начала попросил помочь в запросе, потому что не понял до конца смысл задачи, потом написали тут код с джойнами, но оказалось что он выводит все случаи, но мне нужно чтобы выводились только те для которых код мкб совпадает с возрастом. я бы сам изменил код, но не понял ваш код с джойнами, logical и checkmkb. поэтому прошу подсказать как сделать так чтобы выводились не все случаи а именно те у которых совпадает
...
Рейтинг: 0 / 0
Определение возраста
    #38025054
reware
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да фигнёй вы тут, коллеги, занимаетесь. Если ты прогаммёр, а не тот, кто пишет "я фокс только изучаю", то эту "проблему" немного напрягшись можно решить. Хреново, друзья, что башкой чё то стали мало работать. А стали просить готовые коды, что есть бездарно и неэстетично. Ну ты посиди час-другой, сам сообразишь, как этот алгоритм оформить. Некрасиво программёру такие вещи назойливо просить.
...
Рейтинг: 0 / 0
Определение возраста
    #38025224
Дима1991
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tanglir, это не я предложил брать, а Станиславский, который выше написал как сделать. я лишь написал так как он сказал.
...
Рейтинг: 0 / 0
Определение возраста
    #38025231
Дима1991
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
сейчас фокса нету под рукой. скажите такой код будет работать как мне надо (т.е выдавать только те случаи для которых код мкб совпадает с возрастом пациента. считается что возраст уже определен на момент выполнения этого куска кода) ??? Это только для случая когда поле compr='>'

Код: sql
1.
2.
3.
4.
5.
6.
if hediag.compr=">"
   if pacient.agep>hediag.age
      select sluch.ds0,sluch.ds1,sluch.ds2 ;
      from sluch sl ;
      join pacient p on p.spolis=sl.spolis and p.npolis=sl.npolis ;
      left join hediag h on chrtran(alltrim(sl.ds0),'.','')==alltrim(h.code) ;
...
Рейтинг: 0 / 0
Определение возраста
    #38026136
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дима1991скажите такой код будет работать как мне надонет.
...
Рейтинг: 0 / 0
Определение возраста
    #38026215
Дима1991
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tanglir, Почему нет? представленный тут код, все услуги или случаи выводит. Мне так не нужно чтобы выводилось. Как переделать мне этот код, чтобы выводить только те услуги, в которых соответствует возрасту код мкб

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
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)



или вот я пишу чертов код, но ничего не делает этот код. Уважаемые программисты, почему ничего не делает мой код? и как переделать его?

Код: 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.
IF hediag.compr='>'
   IF pacient.agep>hediag.age
      SELECT usl.ds 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)
   ENDIF 
ELSE
IF hediag.compr='>='
   IF pacient.agep>=hediag.age
      SELECT usl.ds 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)
   ENDIF 
ELSE
IF hediag.compr='<'
   IF pacient.agep<hediag.age
      SELECT usl.ds 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)
   ENDIF 
ELSE
IF hediag.compr='<='
   IF pacient.agep<=hediag.age
      SELECT usl.ds 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)
   ENDIF 
ENDIF
ENDIF
ENDIF 
ENDIF 
...
Рейтинг: 0 / 0
Определение возраста
    #38026232
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дима1991tanglir, Почему нет? представленный тут код, все услуги или случаи выводит. Мне так не нужно чтобы выводилось. Как переделать мне этот код, чтобы выводить только те услуги, в которых соответствует возрасту код мкб
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
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)


Тут написано выбрать все, вот и выбирается все. В поле CheckMKB ты получаешь три значения:
.T. - возраст подходит под условие
.F. - возраст не подходит под условие
.NULL. - неизвестное условие, надо дописать в запрос проверку этого условия
Если тебе надо только где возраст подходит под условие, то выбирай только те записи где CheckMKB = .T.

Дима1991или вот я пишу чертов код, но ничего не делает этот код. Уважаемые программисты, почему ничего не делает мой код? и как переделать его?
Код: 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.
IF hediag.compr='>'
   IF pacient.agep>hediag.age
      SELECT usl.ds 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)
   ENDIF 
ELSE
IF hediag.compr='>='
   IF pacient.agep>=hediag.age
      SELECT usl.ds 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)
   ENDIF 
ELSE
IF hediag.compr='<'
   IF pacient.agep<hediag.age
      SELECT usl.ds 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)
   ENDIF 
ELSE
IF hediag.compr='<='
   IF pacient.agep<=hediag.age
      SELECT usl.ds 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)
   ENDIF 
ENDIF
ENDIF
ENDIF 
ENDIF 


Ты сам-то пробовал осмыслить что написал? Ты проверяешь ОДНУ запись, а потом выбираешь ВСЕ или не выбираешь ни одной.
IF работает с текущей записью таблицы, а SELECT со всей таблицей.

Допиливай первый вариант. Он уже почти рабочий у тебя.
...
Рейтинг: 0 / 0
Определение возраста
    #38026246
Дима1991
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T, Если я правильно вас понял, то получается нужно первый вариант использовать как подзапрос в другом запросе который будет делать выборку по условию where checkmkb=.t. ? и должен быть код типа:

select u.ds from (описанный подзапрос) where checkmkb=.t. ?
...
Рейтинг: 0 / 0
25 сообщений из 187, страница 4 из 8
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Определение возраста
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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