Возврат всех строк с определенным значением в разных столбцах - PullRequest
0 голосов
/ 12 марта 2019

У меня есть таблица, которая выглядит так

Time            Master_Price    Discounted_price1   Discounted_qty1 Discounted_price2   Discounted_qty2 Discounted_price3   Discounted_qty3
1552279758      100                     90                  5               80                  10              70              15
1552279759      200                     195                 6               185                 7               80              12
1552279760      300                     285                 11              200                 9               150             7
1552279761      400                     300                 20              250                 25              220             30
1552279763      500                     400                 30              350                 5               300             8
1552279766      500                     400                 NULL            350                 9               300             9

Уникальный столбец Time в формате unix.

Требуется использовать арифметическую операцию в столбце Master_Price, проверить, какая скидочная цена соответствует ей, и вернуть соответствующее Дисконтированное количество.

Предположим, что если Master_Price равен 100, и я ввожу Master_Price - 20, то должно быть возвращено значение 12 (присутствует во второй строке) или вся строка. Если Master_Price равен 200, а я ввожу Master_Price - 50, то должно быть возвращено значение 7 (присутствует в третьей строке) или вся строка и так далее. Если Master_Price равен 500, и я ввожу Master_Price - 100, тогда он должен вернуть 30 или всю строку, но не строку, которая имеет NULL

В запросе должна быть указана возможность ввода целого числа для вычитания из Master_Price. Это нормально, даже если он жестко закодирован

1 Ответ

0 голосов
/ 12 марта 2019

См. Мой комментарий выше, но я думаю, что этот запрос должен работать:

(он не получает всю строку, если не находит).

select @MP := 500;
select @DISCOUNT := 100;
select 
CASE
    WHEN Discounted_price1 = Master_Price - @DISCOUNT THEN Discounted_qty1 
    WHEN Discounted_price2 = Master_Price - @DISCOUNT THEN Discounted_qty2 
    WHEN Discounted_price3 = Master_Price - @DISCOUNT THEN Discounted_qty3 
ELSE 'None'
END as qty
from prices where Master_Price = @MP and ((Discounted_price1 = Master_Price - @DISCOUNT and Discounted_qty1 >=0) or (Discounted_price2 = Master_Price - @DISCOUNT and Discounted_qty2 >=0) or (Discounted_price3 = Master_Price - @DISCOUNT  and Discounted_qty3 >=0));

Я сделал скрипку, чтобы продемонстрировать / поиграть с ней. http://sqlfiddle.com/#!9/0166cc/16

...