powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Список email из столбца в одну строку
14 сообщений из 14, страница 1 из 1
Список email из столбца в одну строку
    #39283681
winner777
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет !!!
Искал поиском - не нашел.


FB - v 2.1.3

Подскажите пожалуйста -

есть таблица - поля - id, ab_id (л/с абонента), post_id (это должность), email.

Собственно говоря - для каждого л/с - есть список должностей - для каждой должности свой email, который может быть null .

Как мне вывести в одну строку для каждого л/с - список всех email ???


Есть процедура - но что-то как-то не так - выдает для каждой должности отдельную строку и не выводит в одну.

SET TERM ^ ;

create or alter procedure A_R_SPIS_EMAIL_2
returns (
EMAIL_1 varchar(60))
as
declare variable EMAIL varchar(60);
begin
email='*****';
email_1='*****';

--for select abpo2.email || ',,' || case when abpo2.email <> '' then abpo2.email || ',,' || ascii_char(10) else abpo2.email end
--for select cast(left(abpo2.email, 600) as varchar (600))
--for select abpo2.email || ',,'
--for select :email_1 || ',,' ||
--case when abpo2.email <> '' then abpo2.email || ',,' || ascii_char(10) else '' end
--for select (case when abpo2.email <> '' then abpo2.email || ',,' || ascii_char(10) else '' end)
for select :email_1 || ',,' || case when abpo2.email <> '' then abpo2.email || ',,' || ascii_char(10) else '' end

from tb_abon_posts abpo2
where
abpo2.id in (select abpo.id
from tb_abon_posts abpo
where
abpo.abonent_id = 54
and abpo.email is not null
and abpo.email <> ''
)
--group by abpo2.email
into :email_1
do
--FOR SELECT coalesce(abpo.email,'') from tb_abon_posts abpo WHERE abpo.abonent_id = 54 and abpo.post_id = 1 INTO :email_1 DO
--suspend;
begin
--email = :email_1 || ',,' || ascii_char(10);
email_1 = :email_1 || ',,' || ascii_char(10);
suspend;

end
--suspend;
end^

SET TERM ; ^


Arithmetic overflow or division by zero has occurred, arithmetic exception, numeric over flow, or string truncation. At procedure A_R_SPIS_EMAIL_2 line 35, column 9


---------------------------------------------------------------
Извините за длинный текст процедуры.


Прям не знаю что делать.

Спасибо.
...
Рейтинг: 0 / 0
Список email из столбца в одну строку
    #39283684
m7m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
winner777,

1. не в ту ветку написал
2. результат не поместился в EMAIL... ибо тут только 60 символов
3. Возможно LIST тебе поможет
...
Рейтинг: 0 / 0
Список email из столбца в одну строку
    #39283707
winner777
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
m7mwinner777,

1. не в ту ветку написал
2. результат не поместился в EMAIL... ибо тут только 60 символов
3. Возможно LIST тебе поможет


Спасибо.

Не та ветка - точно - пожалуйста перенесите если можно в ветку - firebird.

Не поместился результат - не подумал - как-то больше ударился в ошибку в написании кода - опыта мало.

LIST - помогает - но не могу вывести в эксель - через копировать записи в буфер обмена в IBExpert`e - для дальнейшей работы.

Спасибо за ответ. :)
...
Рейтинг: 0 / 0
Список email из столбца в одну строку
    #39283723
winner777
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Список в одну строку появляется, только максимум email появляется в последней должности.

Т.е. у одного лс - есть 7 должностей, выводит 7 строк - на каждой увеличивающийся email -

post email
1 ,,1@ru.ru,,,,
2 ,,1@ru.ru,,,,2@ru.ru,,,,
3 ,,1@ru.ru,,,,2@ru.ru,,,,3@ru.ru,,,,
4 ,,1@ru.ru,,,,2@ru.ru,,,,3@ru.ru,,,,4@ru.ru,,,,
....................................................................................................

Как мне получить только 1 строку содержащую все email ???

Спасибо.

Модератор: Тема перенесена из форума "IBExpert".
...
Рейтинг: 0 / 0
Список email из столбца в одну строку
    #39283944
m7m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
winner777 Как мне получить только 1 строку содержащую все email ???

suspend;
делай после обработки лицевого
а не после обработки каждой должности
...
Рейтинг: 0 / 0
Список email из столбца в одну строку
    #39283984
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
копируй записи в формате таблица HTML или таблица RTF - и в таком формате вставляй в Ёксель
...
Рейтинг: 0 / 0
Список email из столбца в одну строку
    #39283997
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ariochкопируй записи в формате таблица HTML или таблица RTF - и в таком формате вставляй в Ёксель

Эка тебя на таблицы RTF\HTML пробило-то
...
Рейтинг: 0 / 0
Список email из столбца в одну строку
    #39284017
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DarkMaster,

Это народ на копипаст многострочников в Ёксель пробило....
...
Рейтинг: 0 / 0
Список email из столбца в одну строку
    #39284344
winner777
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо всем.

m7mwinner777 Как мне получить только 1 строку содержащую все email ???

suspend;
делай после обработки лицевого
а не после обработки каждой должности

Ariochкопируй записи в формате таблица HTML или таблица RTF - и в таком формате вставляй в Ёксель

Вам отдельное спасибо.
...
Рейтинг: 0 / 0
Список email из столбца в одну строку
    #39284346
winner777
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Самый простой и быстрый вариант это list -

select list (abpo.email,',')
,abpo.abonent_id
from tb_abon_posts abpo
where
abpo.email is not null
and abpo.email <> ''
group by 2


Для передачи в эксель данной выборки надо было всего лишь поставить - V - Export text BLOB values

А процедуру до ума доведу - отпишусь.

:)
...
Рейтинг: 0 / 0
Список email из столбца в одну строку
    #39284392
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
winner777,

в новых версиях сервера ЕМНИП list больше не всегда BLOB
...
Рейтинг: 0 / 0
Список email из столбца в одну строку
    #39289448
winner777
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет !!!

Воспользовался текстом другой процедуры, написанной старшими и более опытными товарищами. Для меня была непонятка - как взять каждый емайл для каждого абонента -


Код: plsql
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.
32.
33.
34.
35.
36.
37.
38.
39.
40.
SET TERM ^ ;

create or alter procedure A_R_SPIS_EMAIL_5
returns (
    EMAIL_1 varchar(600))
as
declare variable ab_id integer;
begin
    --email_1='';

--     for select ab from (select a.id ab from tb_abonent a where a.id = 139) into :ab_id
--     DO BEGIN

         for select ab111.id from tb_abonent ab111-- where ab111.id = 139
         into :ab_id
         do begin


                    email_1='';
                for select :email_1 || abpo.email || ','
                --for select :email_1 || case when abpo.email <> '' then abpo.email || ',' || ascii_char(10) else '' end
                from tb_abon_posts abpo
                   where
                      abpo.abonent_id = :ab_id
                  --   and (abpo.email is not null and abpo.email <> '')
                      and abpo.email <> ''
              INTO :email_1

              DO BEGIN
           /*--------------------------*/
              end




     suspend;
   END
end^

SET TERM ; ^




Для себя уяснил - нужен вложенный for select. Только изначально я его писал не согласно правилам написания.

Теперь остались вопросы -

1. после каждого последнего адреса емайл - ставиться "запятая" - какой код надо написать, чтобы убрать эту запятую ??? (например: 111@111.ru, 222@222.ru,)
2. если убираю условие - abpo.email <> '' - в результат выводится NULL - без хотя бы даже одного емайла - не понятно почему - объясните пожалуйста это условие. (изначально поле email в таблице tb_abon_posts - varchar(60), может быть null)

Спасибо.
...
Рейтинг: 0 / 0
Список email из столбца в одну строку
    #39289454
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
winner777,

если по чесноку, то код отстой. Чем встроенная функция list не устроила?
...
Рейтинг: 0 / 0
Список email из столбца в одну строку
    #39289459
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
winner777 1. после каждого последнего адреса емайл - ставиться "запятая" - какой код надо написать, чтобы убрать эту запятую ??? (например: 111@111.ru, 222@222.ru,)


Код: sql
1.
2.
select trim(trailing ',' from '1,2,3,4,') as l
from rdb$database



winner7772. если убираю условие - abpo.email <> '' - в результат выводится NULL - без хотя бы даже одного емайла - не понятно почему - объясните пожалуйста это условие. (изначально поле email в таблице tb_abon_posts - varchar(60), может быть null)

Потому что
Код: sql
1.
NULL || str IS NULL
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Список email из столбца в одну строку
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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