Выберите топ 1 подзапрос с параметрами (SQL) - PullRequest
0 голосов
/ 03 февраля 2020

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

Это то, к чему я стремлюсь, но я не могу понять, как правильно выполнить это требование:

(Intellisesnse говорит s. Inventdimid не существует в подзапросе h)

SELECT s.salesid
    ,s.itemid
    ,h.price
FROM salesline s
LEFT OUTER JOIN (
    SELECT TOP 1 p.price
        ,p.itemid
        ,p.dataareaid
        ,l.inventdimid
    FROM inventitemprice p
    JOIN inventdim d ON d.dataareaid = p.dataareaid
        AND d.inventdimid = p.inventdimid
    JOIN inventdim l ON l.dataareaid = p.dataareaid
        AND (
            l.configid = d.configid
            OR d.configid = ''
            )
        AND (
            l.inventcolorid = d.inventcolorid
            OR d.inventcolorid = ''
            )
        AND (
            l.inventsizeid = d.inventsizeid
            OR d.inventsizeid = ''
            )
        AND (
            l.inventstyleid = d.inventstyleid
            OR d.inventstyleid = ''
            )
        AND (p.ACTIVATIONDATE < getdate())
        AND l.inventsiteid = d.inventsiteid
    WHERE pricetype = 0
        AND l.inventdimid = s.inventdimid /* <========= */
        AND p.dataareaid = 'lkc'
    ORDER BY activationdate DESC
        ,d.configid DESC
        ,d.inventcolorid DESC
        ,d.INVENTSIZEID DESC
        ,d.inventstyleid DESC
    ) AS h ON h.itemid = s.itemid
    AND h.DATAAREAID = s.DATAAREAID
    AND h.INVENTDIMID = s.inventdimid
WHERE s.dataareaid = 'lkc'
    AND s.SALESSTATUS = 1

Каким будет подходящий метод для запроса этого?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...