powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / HELP: Прикольная выборка
2 сообщений из 2, страница 1 из 1
HELP: Прикольная выборка
    #32402758
Brodyaga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У меня есть таблица:
Т1: номер (ключевое поле), накладная, вес
мне нужно выбрать из таблицы Т1 первые записи так что бы общий вес , выбраных записей был приближен к определеному числу
Т.Е. мне нужно выбрвть из таблицы Т1 записи что сума поля вес был приблизительно равен 5000 , к примеру, но небольше....
ответ пишите на мыло sergey@briz.mk.ua

P.S. Заранее благодарен
...
Рейтинг: 0 / 0
HELP: Прикольная выборка
    #32402870
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вариант для ASA9:
Код: plaintext
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.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
begin
  // Исходная таблица
  declare local temporary table #T1 (
    Num int not null primary key, 
    Nakl int not null, 
    Ves int not null,
  ) not transactional;

  // Результирующая таблица
  declare local temporary table #T2 (
    Num int not null primary key, 
    Nakl int not null, 
    Ves int not null,
  ) not transactional;

  // Раскидываемый вес
  declare @FullVes int;

  // Параметры записи
  declare @Num int;
  declare @Nakl int;
  declare @Ves int;

  // Заносим исходные данные
  insert into #T1 (Num, Nakl, Ves)
    select  1 ,  1001 ,  1000 
    union all
    select  2 ,  2002 ,  1500 
    union all
    select  3 ,  3003 ,  500 
    union all
    select  4 ,  4004 ,  1500 
    union all
    select  5 ,  5005 ,  2500 ;

  // Устанавливаем нужный для раскидки вес
  set @FullVes =  5000 ;

  // Организуем цикл поиска максимально приближенного веса
  // по исходным данным
  lVes:
  while @FullVes >  0  loop
    // Получаем запись
    select top  1  Num, Nakl, Ves
    into @Num, @Nakl, @Ves
    from #T1
    where Ves <= @FullVes and
          Num not in (select Num from #T2)
    order by Ves desc;

    // Выходим, если больше ничего не найдено
    if @@RowCount =  0  then
      leave lVes;
    end if;

    // Переносим запись
    insert into #T2 (Num, Nakl, Ves)
    values (@Num, @Nakl, @Ves);

    // Отнимаем от общего веса занесенное значение
    set @FullVes = @FullVes - @Ves;
  end loop;

  // Выводим результирующую таблицу
  select *
  from #T2;

  // Показываем, сколько веса осталось не дораскиданным
  select @FullVes;
end
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / HELP: Прикольная выборка
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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