SQL

Microsoft SQL. Процедура вывода максимального количества товаров за определенную сумму

Есть таблица товары, в ней хранятся наименования товаров и их цены и число. Если я правильно понимаю суть задачи, необходимо в ответ на обозначенную сумму, получать максимальное количество товаров, что зависит от их количества и цен. Допустим суммы более чем достаточно для покупки всех единиц товара с самой низкой ценой, тогда на остаток от суммы считается второй по дешевизне товар и т. д.

Я крайне плохо представляю себе Microsoft SQL, поэтому мои формулировки могут звучать странно или неправильно, но я попытаюсь выразиться, как смогу, а вы меня пожалуйста поправьте и наведите в нужное направление.

Как я понимаю, нужно: 1) сперва произвести SELECT таблицы товаров, выборку трех столбцов - наименование товаров, их цены и количество. 2) Дальше сравнить все цены и упорядочить товары по цене? 3) Написать алгоритм, который будет сперва считать, хватит ли количества самого дешевого товара, что бы вписаться в обозначенную сумму, а если не хватит, определять остаток от суммы и количество второго по цене товара на этот остаток, и т. д., а потом суммировать все количества? 4) Возможно я все слишком усложнил и это делается гораздо проще, а может не только проще, но и совершенно иначе - но как именно?
"Процедура вывода максимального количества товаров за определенную сумму"
Сорри ниже мозг свой не грузил.
Пример есть:
a 10 1000 шт
b 20 500 шт

Сумма их будет одинакова 10*1000 = 10000 уе или 20*500=10000
но мы получим a так как купить можно больше в виде 1000 шт.
То бишь выходит надо выбирать товар, что дешевле.
Но дальше еще интересней, у нас 10020 сумма,
тогда выбираем в начале весь дешевей, а как закончится то переходим к следующему подороже товару.
То бишь по сути отсортированные по возрастанию цены и брать товары пока сумма не окажется как у нас.
Чем это делать не знаю... но задача интересная кажется. Если я тоже это правильно понял :)
РЕ
Роман Ершов
98 001
Лучший ответ
Анатолий Курашов Задачу записывал со слов, мог ошибиться и пришла мысль что возможно звучало не "товарОВ", а "товарА", т. е. могло иметься ввиду не среди всех товаров, а среди конкретно взятого - а в этом случае входные данные не только определенная сумма, но еще идентификатор товара и задача сильно упрощается.
Есть смысл что то спрашивать лично у вас непосредственно по SQL или вы в этой области понимаете не больше моего?
Сразу делаешь запрос с сортировкой и хреначишь по нему, считая количества товаров. Я ХЗ, как это пишется на MSSQL, на Оракле - примерно так:

CREATE OR REPLACE
FUNCTION COUNT_GOODS(AMOUNT IN NUMBER)
RETURN NUMBER
IS
CNT NUMBER := 0;
CC NUMBER;
CURSOR CUR IS
SELECT G.PRICE, SUM(W.UNIT_COUNT) AS UNIT_COUNT
FROM GOODS G
INNER JOIN WAREHOUSE W
ON G.ID=W.GOOD_ID
GROUP BY G.PRICE
ORDER BY G.PRICE ASC;
DCUR CUR%ROWTYPE;
BEGIN
OPEN CUR;
LOOP
FETCH CUR INTO DCUR;
EXIT WHEN CUR%NOTFOUND;
CC := MIN(TRUNC(AMOUNT/DCUR.PRICE), DCUR.UNIT_COUNT);
CNT :=CNT + CC;
AMOUNT := AMOUNT - CC*DCUR.PRICE;
EXIT WHEN AMOUNT<DCUR.PRICE;
END LOOP;
CLOSE CUR;
RETURN CNT;
END;
IM
Ilham Mehdiev
90 563
Обычным запросом здесь вряд ли обойдешься. Нужна дополнительная программа - или хранимая процедура на сервере, или код непосредственно в клиенте.
Анатолий Курашов Что такое запрос? Может быть селект это запрос? Вообще задание дано в контексте процедур и решаться должно через них.