Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Подскажите, как это сделать в FB / 6 сообщений из 6, страница 1 из 1
26.09.2014, 22:15
    #38759384
dvim
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите, как это сделать в FB
Есть таблица с ключевым полем.
Код: sql
1.
2.
select * from  table
where  id  in (141,170,155,143)



Хочется получить данные отсортированные по списку в выражении in в примере (141,170,155,143).
Как этого добиться с минимальным геморроем - не знаю. Жду совета. Версия 2.1
...
Рейтинг: 0 / 0
26.09.2014, 22:24
    #38759389
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите, как это сделать в FB
dvim,

так пойдёт

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
select * 
from table
where id in (141,170,155,143)
order by case id
              when 141 then 1
              when 170 then 2
              when 155 then 3
              when 143 then 4
         end
...
Рейтинг: 0 / 0
26.09.2014, 22:24
    #38759390
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите, как это сделать в FB
EXECUTE BLOCK + выборка отдельными запросами.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
26.09.2014, 23:06
    #38759400
dvim
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите, как это сделать в FB
Симонов Денис,
Нет , переменная у меня "141,170,155,143" + среда исполнения своеобразна.
Из нее ваш текст делать сложно, проще через создание промежуточной таблицы ...
...
Рейтинг: 0 / 0
27.09.2014, 00:40
    #38759441
Шавлюк Евгений
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите, как это сделать в FB
dvim,

создаем процедуру
Код: 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.
create or alter procedure STRTOTABLE (
    STR varchar(2000),
    L varchar(20) = ',')
returns (
    N integer,
    CODE varchar(100))
AS
declare variable p integer = -1;
declare variable t integer = 1;
declare variable l1 integer;
begin
  N = 1;
  l1 = char_length(l);
  while (p <> 0) do
  begin
    p = position(l, str, t);
    if (p = 0) then
      code = substring(str from t);
    else
      code = substring(str from t for p-t);
    if (code > '') then
    begin
      suspend;
      N = N+1;
    end
    t = p+l1;
  end
end



И вызов
Код: sql
1.
2.
select t.* from strttable('141,170,155,143') s
left join table t on t.id = s.code
...
Рейтинг: 0 / 0
29.09.2014, 23:16
    #38761347
dvim
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите, как это сделать в FB
Шавлюк Евгений,

Спасибо!
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Подскажите, как это сделать в FB / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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