|
Сравнение разных полей
|
|||
---|---|---|---|
#18+
всем привет. Подскажите пожалуйста как сделать такое сравнение Есть таблица foms.dbf с полями spolis,npolis,w. И есть таблица pac.dbf с полями spolis,npolis,pol. spolis - серия npolis - номер полиса w и pol - пол в таблице foms иногда поле spolis может быть пустое, если полис единого образца серия не указывается, а в поле pac.dbf если полис единого образца в поле pac.spolis пишется ЕНП. как сделать сравнение полей spolis и npolis в обеих таблицах и вывести в результирующий курсор поле pol? Ну т.е. учитывать если серия пустая то подставлять в запросе вместо spolis ЕНП и сравнивать. допустим таблица foms такая spolis npolis w 123456789012345 Ж 123456765012345 М А таблица pac такая spolis npolis pol ЕНП 123456765012345 Ж ЕНП 123456765012345 М как сравнить эти таблицы и вывести в курсор поле pol? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2013, 17:59 |
|
Сравнение разных полей
|
|||
---|---|---|---|
#18+
ни у кого нет предложений? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2013, 18:26 |
|
Сравнение разных полей
|
|||
---|---|---|---|
#18+
так можно писать? авторselect foms.alltrim(IIF(foms.spolis=Null,"ЕНП",foms.spolis)),foms.npolis,foms.w,pac.pol where foms.spolis=pac.spolis and foms.npolis=pac.npolis into cursor cr1 ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2013, 18:45 |
|
Сравнение разных полей
|
|||
---|---|---|---|
#18+
кот_2013ни у кого нет предложений? Тут не круглосуточная справочная, постоянных дежурных нет. Как-то так Код: sql 1.
кот_2013так можно писать? авторselect foms.alltrim(IIF(foms.spolis=Null,"ЕНП",foms.spolis)),foms.npolis,foms.w,pac.pol where foms.spolis=pac.spolis and foms.npolis=pac.npolis into cursor cr1 Писать можно как-угодно. Будет ли работать? Запусти и проверь ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2013, 20:49 |
|
Сравнение разных полей
|
|||
---|---|---|---|
#18+
Dima T, не могли бы вы пояснить ваш код? функция strtran заменяет выражение в строке на другое же.. вот как поменять если в поле spolis ничего нету на ЕНП ? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2013, 20:56 |
|
Сравнение разных полей
|
|||
---|---|---|---|
#18+
кот_2013Dima T, не могли бы вы пояснить ваш код? функция strtran заменяет выражение в строке на другое же.. вот как поменять если в поле spolis ничего нету на ЕНП ? надо менять "ЕНП " на ничего, т.е. "". В результате значения из обох таблиц должны быть без "ЕНП ", только после этого сравнивать. strtran надо примерять к таблице где встречается "ЕНП ", если я таблицы перепутал, то смени наоборот. Или так (чтоб наверняка): Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2013, 21:04 |
|
Сравнение разных полей
|
|||
---|---|---|---|
#18+
Есть такая функция EVL(). Код: sql 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
06.08.2013, 10:31 |
|
Сравнение разных полей
|
|||
---|---|---|---|
#18+
_VladimirM_, Спасибо, вроде разобрался с этим. А если допустим длина символьного поля = 7, то как можно в начало добавить 00? авторSelect ....,iif(LEN(ALLTRIM(pole))<=7,"00"+pole,pole) as pole ТАК ВЕРНО или нет? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.08.2013, 16:19 |
|
Сравнение разных полей
|
|||
---|---|---|---|
#18+
ТАК верное? случайно цитату сделал вместо кода Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
06.08.2013, 16:21 |
|
Сравнение разных полей
|
|||
---|---|---|---|
#18+
Я извиняюсь, у Вас полиса единого образца 15-ти символьные? Как бы то ни было, по моему лучше идентифицировать полиса по утвержденному формату полиса ЕОбразца Затем идут временные - их формат тоже определён конкретно ну и все отальные ... |
|||
:
Нравится:
Не нравится:
|
|||
06.08.2013, 17:48 |
|
Сравнение разных полей
|
|||
---|---|---|---|
#18+
Людмila, Нет, у единых полисов 16 цифр бывает. У нас в базе старого образца полисы как бы урезаются и пишут 7 цифр, хотя должно быть 9, поэтому мне нужно в начало добавлять 00 чтобы для сравнения в дальнейшем использовать общий стандарт. Так же и с новыми у новых нету серии, а у нас не знаю почему сделали серию ЕНП, поэтому также надо вместо ЕНП писать "ничего". ... |
|||
:
Нравится:
Не нравится:
|
|||
06.08.2013, 20:40 |
|
Сравнение разных полей
|
|||
---|---|---|---|
#18+
кот_2013ТАК верное? случайно цитату сделал вместо кода Код: sql 1.
Код: sql 1.
Так верно? Если тебе надо 9 символов и недостающие заполнить ведущими нулями, то так: Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
06.08.2013, 21:04 |
|
Сравнение разных полей
|
|||
---|---|---|---|
#18+
Dima T, так он для всех заполнит получается же. А там могут быть записи для которых и не нужно добавлять. Только для тех, где символов <=7 нужно. :) моя проверка всегда верная будет или нет хотел бы узнать? Так то я сделал как указал через IIF подставляется вроде б ... |
|||
:
Нравится:
Не нравится:
|
|||
06.08.2013, 21:53 |
|
Сравнение разных полей
|
|||
---|---|---|---|
#18+
Ты бы сначала четко сформулировал что тебе надо. А потом спрашивал верно решение или нет. Тут никто не в курсе чего там у тебя происходит. Лично я не могу придумать нормального объяснения дописыванию двух нулей если в строке не более 7 символов. Какой смысл превращать 6 символов в 8 ? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2013, 07:32 |
|
Сравнение разных полей
|
|||
---|---|---|---|
#18+
согласен, может быть нечетко сформулировал. У нас в базе полис всегда имеет 7 цифр, хотя по стандарту должно быть 9. первые два нуля просто не указываются в базе. Мне нужно в запросе добавлять 00 в начало полиса. В поле polis может быть полис либо состоящий из 7 цифр, либо из 16 (новый образец). Теперь в этом запросе мне нужно для полисов, где длина равна 7 добавить в начало 00, чтобы получить 9-ти значный полис, для сравнения. Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2013, 10:39 |
|
Сравнение разных полей
|
|||
---|---|---|---|
#18+
кот_2013 Вы бы сначала определились с форматами данных, как было вам замечено. Иначе вам все функции для работы со строками переберут. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2013, 11:13 |
|
Сравнение разных полей
|
|||
---|---|---|---|
#18+
Может для начала или уже потом пробежаться REPL npolis WITH PADL(alltrim(npolis),9,'0') FOR LEN(alltrim(npolis))<9 ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2013, 15:56 |
|
Сравнение разных полей
|
|||
---|---|---|---|
#18+
кот_2013согласен, может быть нечетко сформулировал. У нас в базе полис всегда имеет 7 цифр, хотя по стандарту должно быть 9. первые два нуля просто не указываются в базе. Мне нужно в запросе добавлять 00 в начало полиса. В поле polis может быть полис либо состоящий из 7 цифр, либо из 16 (новый образец). Теперь в этом запросе мне нужно для полисов, где длина равна 7 добавить в начало 00, чтобы получить 9-ти значный полис, для сравнения. Код: sql 1.
Вы неоправданно считаете, что "меньше или равно" - это то же самое, что и "равно". Ведь на практике, у Вас может быть и 6 символов и ни одного символа. К таким значениям тоже будете нули добавлять? Если есть техническая возможность, то я бы добавил в Ваши таблицы по дополнительному полю, где будет хранится номер полиса приведенный к единому стандарту. И именно это поле и использовать для сравнения и поиска. Ну, например, назовите это поле "cpolis", тогда в таблице будут такие значения npolis cpolis1234567 001234567123456789 1234567891234567890123456 12345678901234561212<пусто><пусто>7654321 007654321 А поле npolis останется для показа пользователю и для отчетов. В худшем случае, можно сделать отдельную таблицу с парой полей. npolis - ключ поиска и cpolis - значение в нужном формате. При выполнении SQL-запросов добавлять эту таблицу как справочник. Если же Вы все-таки хотите конструировать выражение для сравнения "на лету", то анализируйте длину ровно на 7 символов, а никак не меньше или равно И еще один важный момент. Если у Вас поля имеют тип Character, то они имеют еще и концевые пробелы (надеюсь, ведущие пробелы Вы отбрасываете еще на этапе ввода и в таблице их нет). Это значит, что если само поле имеет размерность, например, 20 символов, то добавив к нему 2 ведущих нуля Вы получите символьную строку длиной 22 символа. Как следствие, после добавления двух символов в начале необходимо отбросить два концевых пробела. Это можно сделать при помощи функции left(). В результате, получится нечто вроде такого Код: sql 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2013, 21:32 |
|
Сравнение разных полей
|
|||
---|---|---|---|
#18+
ВладимирМ, меньше 7-ми полей не может быть. т.к. программа не позволяет регистрировать пациентов, если был введен полис меньше 7-ми. я же говорю могут быть либо 7 либо 16 цифр. для тех где 7 цифр в начало 00 добавить нужно ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2013, 07:09 |
|
|
start [/forum/topic.php?fid=41&msg=38362658&tid=1582948]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
32ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
others: | 17ms |
total: | 139ms |
0 / 0 |