Похоже, вы на правильном пути, и вы должны настроить свой простой запрос, прежде чем перейти к чему-то фантастическому - Бритву Оккама. Вам просто нужно заказать запрос, а затем ограничить количество результатов запроса. Это область, где основные дистрибутивы SQL несовместимы, и я не уверен, что это связано с отсутствием дизайна в спецификации SQL или изгоем языка разработчиками.
В Oracle и Postgres вам понадобится OFFSET и LIMIT, в MySQL вам будет нужен только LIMIT, а с IBM DB2 вы будете использовать FETCH FIRST, все они расположены ближе к концу запроса. При использовании T-SQL (для MS SQL Server) вы будете использовать TOP в SELECT.
DECLARE @myname VARCHAR(32) = 'PEN'
SELECT TOP 1
t1.CODE
FROM Table1 t1
INNER JOIN t2
ON t1.IDK = t2.IDK
WHERE t1.NAME = @myname
ORDER BY t2.QTY
На вашем этапе программирования баз данных, я бы предостеречь вас от использования в таблицах памяти, не понимая последствий. Они являются фантастическим инструментом для OLAP и другого анализа, но могут иметь непредвиденные последствия для производительности в средах, где ресурсы подвергаются конкуренции или находятся под угрозой.
Кроме того, избегайте вложенных запросов, когда они не нужны для удобочитаемости, ремонтопригодности и производительности. Каждый уровень вложенности добавляет измерение к объему обрабатываемых данных, а время запроса имеет соотношение 1: 1 и объем данных. В этом случае вложенность и JOINing окажут такое же влияние на размер данных, но вложенность исключает возможность оптимизации некоторых баз данных. Обе эти стратегии превосходны в правильных целях, но, как кто-то учится, убедитесь, что вы понимаете их обоих, прежде чем становиться зависимыми от них.
Вы также можете добавить детали таблицы «MTRDATA», чтобы другие могли понять, что именно вы пытаетесь? – stom
Вы правы, я исправил его сейчас! – John