Убрать повторяющиеся записи
На страницу 1, 2 След.
|
Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
cool_dude Участник - экстремал
Вступление в Клуб: 05.02.2013
|
Пт Июл 26, 2019 13:26  Убрать повторяющиеся записи |
|
Полезность: Нет оценки
|
Здравствуйте, уважаемые форумчане. Пишу отчет об адресах клиентов, у которых есть кредит. Отчет формируется без проблем. Но есть небольшая проблема. Проблема в том, что у некоторых клиентов есть по два или три адреса (например старый адрес и новый), или же один и тот же адрес сохранен два раза (например один без пробела, а другой с пробелом, и они отличаются). После выгрузки отчета у таких клиентов строки записи повторяются. т.е. если у клиента 4 счета и два адреса, то эти 4 счета для каждой записи адреса повторяется. Как сделать так, чтоб они не повторялись? И еще, можно ли для каждого клиента, объединит поля "Клиент", "Номер договора" и т.п., чтоб они тоже в каждой строке не повторялись? Ниже привел кусок своего кода. Прошу помочь в решении этой проблемы.
[code]
Procedure rep_ex_data
is
iRow integer := 5;
i integer := 0;
begin
for (select u(
u.[CLIENT].[NAME] :client_name,
u.[NUM_DOG] :num_dog,
u.[COM_STATUS].[NAME] :status_dogovora,
u.[CLIENT] :id_cl,
u.[FT_CREDIT].[CODE_ISO] :val_dog,
u.[ARRAY_DOG_ACC].[ACCOUNT_DOG].[1].[2].[MAIN_V_ID] :acc_all,
u.[ARRAY_DOG_ACC].[ACCOUNT_DOG].[1].[2].[SALDO] :acc_saldo,
u.[ARRAY_DOG_ACC].[ACCOUNT_DOG].[1].[2].[SALDO_NT] :acc_saldo_nt
)
in ::[PR_CRED] all
where u.[COM_STATUS] = ::[COM_STATUS_PRD]([code]='WORK') and u.[DEPART]=341664011 and u%CLASS = 'KRED_PERS'
ORDER BY u.[CLIENT].[NAME])
loop
for (select a(
a.[POST_CODE] :ind,
a.[CITY].[FULL_NAME] :gorod,
a.[STREET_STR] :ulitsa,
a.[KORPUS] :korpus,
a.[HOUSE] :dom,
a.[FLAT] :kv
)
in ::[PERSONAL_ADDRESS], (::[CLIENT] all : c) all
where c%id = u.id_cl and a%collection = c.[ADDRESSES])
loop
i := i + 1;
excel.write(iRow, 1, i);
excel.write(iRow, 2, u.client_name);
excel.write(iRow, 3, u.num_dog);
excel.write(iRow, 4, u.status_dogovora);
excel.write(iRow, 5, nvl(''''||u.val_dog, ''));
excel.write(iRow, 6, nvl(''''||u.acc_all, ''));
excel.write(iRow, 7, nvl(''''||u.acc_saldo, ''));
excel.write(iRow, 8, nvl(''''||u.acc_saldo_nt, ''));
excel.write(iRow, 9, a.ind||', '||a.gorod||', '||a.ulitsa||', '||a.korpus||', '||a.dom||', '||a.kv);
iRow := iRow + 1;
end loop;
end loop;
Draw_Caption_Rep;
end;
[/code] |
|
 |
Матвеев Евгений Профи
Вступление в Клуб: 31.01.2012
|
Пт Июл 26, 2019 14:25  Re: Убрать повторяющиеся записи |
|
Полезность: 1
|
Пишу отчет об адресах клиентов, у которых есть кредит. Отчет формируется без проблем. Но есть небольшая проблема.
Проблема в том, что у некоторых клиентов есть по два или три адреса (например старый адрес и новый), или же один и тот же адрес сохранен два раза (например один без пробела, а другой с пробелом, и они отличаются). После выгрузки отчета у таких клиентов строки записи повторяются. т.е. если у клиента 4 счета и два адреса, то эти 4 счета для каждой записи адреса повторяется. Как сделать так, чтоб они не повторялись?
см. п.2 (ниже) плюс фильтр по типу адреса можно добавить, здесь
select a(
a.[POST_CODE] :ind,
a.[CITY].[FULL_NAME] :gorod,
a.[STREET_STR] :ulitsa,
a.[KORPUS] :korpus,
a.[HOUSE] :dom,
a.[FLAT] :kv
)
in ::[PERSONAL_ADDRESS], (::[CLIENT] all : c) all
where c%id = u.id_cl and a%collection = c.[ADDRESSES]) ... and тип адреса = [Адрес местонахождения][Место пребывания(фактического нахождения)][Юридический (для юр. лиц.)] и т.д. и т.п.
loop
---------------
И еще, можно ли для каждого клиента, объединит поля "Клиент", "Номер договора" и т.п., чтоб они тоже в каждой строке не повторялись? Ниже привел кусок своего кода. Прошу помочь в решении этой проблемы.
Можно, запоминай предыдущие значения Клиента и Номера договора, как вариант, и выводи их только в случае различия текущих и предыдущих значений
Плюс минус так должно выглядеть
if u.client_name != old_client_name then
excel.write(iRow, 2, u.client_name);
old_client_name := u.client_name;
end if; |
|
 |
Volod Эксперт
Вступление в Клуб: 19.09.2007
|
Пт Июл 26, 2019 14:28   |
|
Полезность: Нет оценки
|
Адреса каких типов должны попадать в отчет?
Если 2 адреса (например, старый и новый) - какой из них правильный? |
|
 |
cool_dude Участник - экстремал
Вступление в Клуб: 05.02.2013
|
Пт Июл 26, 2019 15:29  Re: Убрать повторяющиеся записи |
|
Полезность: Нет оценки
|
Матвеев Евгений пишет: | Пишу отчет об адресах клиентов, у которых есть кредит. Отчет формируется без проблем. Но есть небольшая проблема.
Проблема в том, что у некоторых клиентов есть по два или три адреса (например старый адрес и новый), или же один и тот же адрес сохранен два раза (например один без пробела, а другой с пробелом, и они отличаются). После выгрузки отчета у таких клиентов строки записи повторяются. т.е. если у клиента 4 счета и два адреса, то эти 4 счета для каждой записи адреса повторяется. Как сделать так, чтоб они не повторялись?
см. п.2 (ниже) плюс фильтр по типу адреса можно добавить, здесь
select a(
a.[POST_CODE] :ind,
a.[CITY].[FULL_NAME] :gorod,
a.[STREET_STR] :ulitsa,
a.[KORPUS] :korpus,
a.[HOUSE] :dom,
a.[FLAT] :kv
)
in ::[PERSONAL_ADDRESS], (::[CLIENT] all : c) all
where c%id = u.id_cl and a%collection = c.[ADDRESSES]) ... and тип адреса = [Адрес местонахождения][Место пребывания(фактического нахождения)][Юридический (для юр. лиц.)] и т.д. и т.п.
loop
---------------
И еще, можно ли для каждого клиента, объединит поля "Клиент", "Номер договора" и т.п., чтоб они тоже в каждой строке не повторялись? Ниже привел кусок своего кода. Прошу помочь в решении этой проблемы.
Можно, запоминай предыдущие значения Клиента и Номера договора, как вариант, и выводи их только в случае различия текущих и предыдущих значений
Плюс минус так должно выглядеть
if u.client_name != old_client_name then
excel.write(iRow, 2, u.client_name);
old_client_name := u.client_name;
end if; |
По типу адреса не могу исключить, потому что у этих адресов клиента одинаковые записи, только некоторые из них отличаются только пробелом, а в остальном всё совпадает. |
|
 |
vtar Эксперт
Вступление в Клуб: 20.03.2009
|
Пт Июл 26, 2019 15:31   |
|
Полезность: Нет оценки
|
на хрен пробел.
replace(addr, ' ', '')
спасет отца русской демократии |
|
 |
cool_dude Участник - экстремал
Вступление в Клуб: 05.02.2013
|
Пт Июл 26, 2019 15:34   |
|
Полезность: Нет оценки
|
Volod пишет: | Адреса каких типов должны попадать в отчет?
Если 2 адреса (например, старый и новый) - какой из них правильный? |
1) Адреса типа "Фактический" должны попадать в отчет. Это отчет для физ.лиц.
2) По тех. заданию, оба адреса должны выходить в отчет. Есть такие моменты, что наши операционисты оба адреса (и в старом и в новом) вставят галочки "Фиксировать". |
|
 |
Volod Эксперт
Вступление в Клуб: 19.09.2007
|
Пт Июл 26, 2019 15:37   |
|
Полезность: Нет оценки
|
Не понятно тогда, какие адреса не должны попадать?
Которые различаются каким-либо реквизитом (без учета пробелов)?
Группировка по реквизитам адреса поможет. |
|
 |
cool_dude Участник - экстремал
Вступление в Клуб: 05.02.2013
|
Пт Июл 26, 2019 15:45   |
|
Полезность: Нет оценки
|
Volod пишет: | Не понятно тогда, какие адреса не должны попадать?
Которые различаются каким-либо реквизитом (без учета пробелов)?
Группировка по реквизитам адреса поможет. |
Не должны попадать те адреса, которые отличаются только пробелами.
Остальные, все, должны попадать.
Группировку по реквизитам, как сделать? |
|
 |
cool_dude Участник - экстремал
Вступление в Клуб: 05.02.2013
|
Пт Июл 26, 2019 15:46   |
|
Полезность: Нет оценки
|
vtar пишет: | на хрен пробел.
replace(addr, ' ', '')
спасет отца русской демократии |
Что-то не помог...  |
|
 |
Volod Эксперт
Вступление в Клуб: 19.09.2007
|
Пт Июл 26, 2019 16:43   |
|
Полезность: Нет оценки
|
cool_dude пишет: |
Группировку по реквизитам, как сделать? |
group by? |
|
 |
Volod Эксперт
Вступление в Клуб: 19.09.2007
|
Пт Июл 26, 2019 16:45   |
|
Полезность: Нет оценки
|
И еще, приведи пример, как должно быть в отчете, если у клиента 4 счета и два адреса, "меня терзают смутные сомнения" |
|
 |
Volod Эксперт
Вступление в Клуб: 19.09.2007
|
Пт Июл 26, 2019 16:49   |
|
Полезность: Нет оценки
|
Кстати, сколько строк в отчете будет?
excel.write не оптимально будет, да и вложенный селект тоже плохо |
|
 |
Матвеев Евгений Профи
Вступление в Клуб: 31.01.2012
|
Пт Июл 26, 2019 16:51   |
|
Полезность: Нет оценки
|
vtar пишет: | на хрен пробел.
replace(addr, ' ', '')
спасет отца русской демократии |
Как вариант вот так
Код: |
REGEXP_REPLACE(Adr, ' ')
|
|
|
 |
Матвеев Евгений Профи
Вступление в Клуб: 31.01.2012
|
Пт Июл 26, 2019 16:59   |
|
Полезность: Нет оценки
|
cool_dude пишет: |
Если 2 адреса (например, старый и новый) - какой из них правильный?
1) Адреса типа "Фактический" должны попадать в отчет. Это отчет для физ.лиц.
|
Выводи в два этапа, сначала строго по фактическому, плюс запоминай без пробелов
Потом все остальные с проверкой значений на соответствие значению из первого пункта
cool_dude пишет: |
2) По тех. заданию, оба адреса должны выходить в отчет. Есть такие моменты, что наши операционисты оба адреса (и в старом и в новом) вставят галочки "Фиксировать". |
Если галка фиксировать, то что? |
|
 |
cool_dude Участник - экстремал
Вступление в Клуб: 05.02.2013
|
Пн Июл 29, 2019 12:59   |
|
Полезность: Нет оценки
|
Матвеев Евгений пишет: |
Если галка фиксировать, то что? |
Да ничего. Просто по этому полю тоже невозможно фильтровать. Я как вариант хотел взять только фиксированные, а оказывается наши "супер" операционисты во всех адресах вставят такую галку...) |
|
 |
|
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
|
|