powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Группирование строк
22 сообщений из 22, страница 1 из 1
Группирование строк
    #33577788
bor__bor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ASA 5.0

Есть таблица с 2 полями kod (integer), price(numeric)
Возможно ли сгруппировать строки по полю kod так чтобы в одной группе sum(price) <= 500
одним запросом
...
Рейтинг: 0 / 0
Группирование строк
    #33577848
Фотография Александр Гoлдун
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bor__bor пишет:

> Есть таблица с 2 полями kod (integer), price(numeric)
> Возможно ли сгруппировать строки по полю kod так чтобы в одной группе
> sum(price) <= 500
> одним запросом

SELECT kod, sum(price)
FROM table_name
HAVING sum(price) <= 500

Рекомендую почитать Введение в SQL Грабера.
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Группирование строк
    #33577893
bor__bor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мне не нужно отбирать строки у которых sum(price) < 500
мне нужно сгруппировать строки с sum(price) < 500 и для одинаковых значений kod

Например

kod price
1 200
1 200
1 200
2 300
3 700

В результате запроса должно получится

kod sum(price)
1 400
1 200
2 300
3 700
...
Рейтинг: 0 / 0
Группирование строк
    #33577924
bor__bor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SELECT kod, sum(price)
FROM table_name
HAVING sum(price) <= 500

и если уж использовать этот having то в этот запросе вообщето поле kod должно быть в group by
...
Рейтинг: 0 / 0
Группирование строк
    #33577994
Фотография Александр Гoлдун
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bor__bor пишет:
> и если уж использовать этот having то в этот запросе вообщето поле kod
> должно быть в group by

Разумеется. Поторопился.
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Группирование строк
    #33578062
Фотография Александр Гoлдун
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bor__bor пишет:

> Мне не нужно отбирать строки у которых sum(price) < 500
> мне нужно сгруппировать строки с sum(price) < 500 и для одинаковых
> значений kod

Ну тогда скорее всего процедура с курсором и временными таблицами.
Навскидку приемлемого решения в виде запроса не вижу.
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Группирование строк
    #33578089
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bor__borМне не нужно отбирать строки у которых sum(price) < 500
мне нужно сгруппировать строки с sum(price) < 500 и для одинаковых значений kodНет, одним запросом это сделать нереально. Даже двумя нереально :)
Это одна из типичных транспортных задач. Возьми учебник по линейному программированию, там будет описание нескольких алгоритмов решения.

Самое простое - сделать временную табличку а потом циклом бежать по курсору и заполнять эту табличку, ну что-то вроде такого:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
declare mId integer;
create table #target(id integer, kod integer, sum_price money);
for loop1 as crsr1 cursor for select kod as cKod, price as cPrice from source_table
             for read only do
    set mId = null;
    select first id into mId from #target where #target.kod=cKod and #target.sum_price+cPrice <  500 
              order by #target.sum_price desc;

    if mId is null then
        insert into #target values((select max(id)+ 1 ) from #target), cKod, cPrice);
    else
        update #target set sum_price = sum_price + cPrice;
   end if;
end for;
select kod, sum_price from #target;
Напильник в руки и вперед :)
...
Рейтинг: 0 / 0
Группирование строк
    #33578470
Фотография Zhora
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне казалось, что это из области "running total", вроде через "windows
functions" (over in Oracle, analytic functions в ASA есть, или эта версия старовата ?).
...
Рейтинг: 0 / 0
Группирование строк
    #33578480
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZhoraМне казалось, что это из области "running total", вроде через "windows
functions" (over in Oracle, analytic functions в ASA есть, или эта версия старовата ?).Вообще-то аналитические функции здесь вряд-ли помогут. Во всяком случае не могу придумать как их заставить делать необходимую сортировку. Но в ASA5 действительно только sum/count/avg были.
...
Рейтинг: 0 / 0
Группирование строк
    #33579029
bor__bor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
>Самое простое - сделать временную табличку а потом циклом бежать по >курсору и заполнять эту табличку, ну что-то вроде такого:

Спасибо за сообщения ....
я уже собственно так и сделал...

А возможно ли в ASA (не важно какой версии) такие конструкции запроса

SElect .... from (Select....)

или чтото подобное...т.е возможно ли делать выбор не из связки таблиц а из результируюшего набора вложенного запроса. В MSS это кажется возможно

Я собственно когда задавал вопрос надеялся на ответ подобного рода.
...
Рейтинг: 0 / 0
Группирование строк
    #33579039
Dim2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bor__bor пишет:

> А возможно ли в ASA (не важно какой версии) такие конструкции запроса
>
> SElect .... from (Select....)

Да, как минимум, с 5.5 (более старых версий у меня нет).
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Группирование строк
    #33579132
bor__bor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Написал такой запрос

Select ed_index from
(Select ed_index,ed_name from editions);

Ругнулась

Line: 2
SQLSTATE = 37000

[Sybase][ODBC Driver]Syntax error: near 'Select' in ...ed_index from ([Select] ed_index,ed_name...

Версия как раз ASA 5.5

В чем ту может быть проблема
...
Рейтинг: 0 / 0
Группирование строк
    #33579180
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
как минимум подзапросу алиас нужно указывать:
Код: plaintext
1.
2.
3.
4.
SELECT alias.ed_index
FROM (
  SELECT ed_index,ed_name 
  FROM editions
) AS alias;
...
Рейтинг: 0 / 0
Группирование строк
    #33579212
bor__bor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Результат выполнения тот же

---------------------------
Database Administration
---------------------------
Line: 5
SQLSTATE = 37000

[Sybase][ODBC Driver]Syntax error: near 'SELECT' in ....ed_index FROM ( [SELECT] ed_index,ed_name...
Continue?
---------------------------
Да Нет
---------------------------
...
Рейтинг: 0 / 0
Группирование строк
    #33579561
Фотография Александр Гoлдун
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dim2000 пишет:

>> А возможно ли в ASA (не важно какой версии) такие конструкции запроса
>> SElect .... from (Select....)
> Да, как минимум, с 5.5 (более старых версий у меня нет).

Уверен? Нет под рукой сейчас установленного 5.5, но по моему это
появилось не раньше 6 или даже 7
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Группирование строк
    #33579708
Dim2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Александр Гoлдун пишет:

> Уверен? Нет под рукой сейчас установленного 5.5, но по моему это
> появилось не раньше 6 или даже 7

Мне проще согласиться , т.к. проверять не на чем, я с 5.5 уже года
полтора не работаю...
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Группирование строк
    #33579815
bor__bor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Действительно на 7 и 8 версии работает...
...
Рейтинг: 0 / 0
Группирование строк
    #33581521
iLLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну вы, блин, даете!!!
В 6-ке вложенные запросы работают. И ответ мог бы звучать так (на 5.5. не
уверен):
select *
from table_name as t1
where exists(SELECT 1
FROM table_name as t2
where t1.kod=t2.kod
GROUP BY kod
HAVING sum(price) <= 500)
Ну или что-то типа того.
OLAP-функции здесь решили бы задачу как раз без вложенного селекта, но они
пошли с 9-ки:
(Пишу на память)
select kod,price,sum(price) over (partiotion by kod) as sum_group
from table
where sum_group<=500


Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Группирование строк
    #33581536
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iLLer
Ну вы, блин, даете!!!
В 6-ке вложенные запросы работают. И ответ мог бы звучать так (на 5.5. не
уверен):И?
Не работает ни один из предложеных вариантов :)
...
Рейтинг: 0 / 0
Группирование строк
    #33581538
Фотография Александр Гoлдун
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iLLer пишет:

> В 6-ке вложенные запросы работают.

не путай вложенные запросы и derived tables, т.е. select from select.
Вложенные запросы, насколько помню, и в 5.0 работали.
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Группирование строк
    #33581834
iLLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вопрос поставлен некорректно.
Мне не нужно отбирать строки у которых sum(price) < 500
мне нужно сгруппировать строки с sum(price) < 500 и для одинаковых
значений kod

Например

kod price
1 200
1 200
1 200
2 300
3 700

В результате запроса должно получится

kod sum(price)
1 400
1 200
2 300
3 700

Судя по примеру, который приведен вопрошающим, приведенный вопрос означает
совершенно другие действия.
Я поторопился, и для приведенных примеров на самом деле OLAPа может не
хватить, не говоря об обычных ф-ях. ХП с курсором помогут автору.

P.S.: Причем для получения однозначного результата не хватает данных. Либо
скажите, что должно получиться в этом случае:
kod price
1 100
1 200
1 100
1 200
2 300
....
Ведь, как известно, у строк номеров нет, и их положение в таблице не
взаимосвязано. Поэтому на выходе может получиться несколько наборов,
удовлетворяющих вопросу.


Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Группирование строк
    #33584761
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iLLerСудя по примеру, который приведен вопрошающим, приведенный вопрос означает совершенно другие действия.Для того-то исходную и ожидаемую таблицу обычно и показывают чтобы избавится от разночтений.

iLLerВедь, как известно, у строк номеров нет, и их положение в таблице не
взаимосвязано. Поэтому на выходе может получиться несколько наборов,
удовлетворяющих вопросу. Совершенно верно. Ты никогда не возился с транспортными задачами? Множество, удовлетворяющих условию, решений для них норма.
...
Рейтинг: 0 / 0
22 сообщений из 22, страница 1 из 1
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Группирование строк
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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