Мне нужна помощь в решении простой проблемы, которую я считаю, потому что я полностью отстой в SQL. Итак, все в моем запросе работает нормально, но мне нужно настроить его для автоматизации одного процесса. У меня есть товар на разных складах ( AA.Armazem ), и моя цель - выбрать запас ( AA.StkActual ) только одного из этих складов, в зависимости от значения StockValueкаждый. Итак, я всегда хочу рассмотреть AA.Armazem = 'A7' сначала , , затем 'A8 ', , затем 'A9' . Я буду рассматривать склад «A8» только в том случае, если склад «A7» имеет запас = 0 , и поэтому будет рассматривать склад «A9» только тогда, когда «A7» и «A8» отсутствуют на складе (AA.StkActual = 0) .
Сейчас моя проблема в том, что, поскольку я хочу минимальное значение StockValue, я получаю AA.StkActual от AA.Armazem = 'A9', когда мне нужно получитьAA.StkActual AA.Armazem = 'A7', так как он все еще имеет единицы измерения. PS Компонент, о котором идет речь, от AA.Familia = 98. Есть компоненты из других семейств, но, как я сказал, они все находятся на складе 'A7'.
Вот мой запрос:
select
A1.Artigo as Artigo,
A1.Descricao as Descricao, (coalesce(MIN(
case
when AA.Armazem = 'A7' then
CASE WHEN A2.Familia = 39 THEN AA.StkActual / CA.Quantidade ELSE AA.StkActual END
else
null
end
), MIN(
case
when AA.Armazem = 'A8' then
CASE WHEN A2.Familia = 39 THEN AA.StkActual / CA.Quantidade ELSE AA.StkActual END
else
null
end
), MIN(
case
when AA.Armazem = 'A9' then
CASE WHEN A2.Familia = 39 THEN AA.StkActual / CA.Quantidade ELSE AA.StkActual END
else
null
end
))) as Stock,
0 as QuantidadeEmEncomendasPendentes,
'Componente Stock' As Id
from
Artigo A1
join ComponentesArtigos CA On CA.ArtigoComposto = A1.Artigo
join Artigo A2 On A2.Artigo = CA.Componente And (A2.Familia IN (37,38,39,45,98))
join ArtigoArmazem AA ON AA.Artigo = A2.Artigo And (AA.Armazem IN ('A7','A8', 'A9'))
group by
A1.Artigo,
A1.Descricao
Представленный мной запрос дает мне минимальный запас в результате, однако, если я просто получу все компоненты, я получу такой результат:
запрос со всемикомпоненты и без MIN Как вы можете видеть на изображении, компонент 'SBC' является компонентом AA.Familia = 98;Мне нужно, чтобы запрос сначала рассмотрел AA.StkActual от AA.Armazem = 'A7', затем 'A8', затем 'A9', как я объяснил, но только для компонента, который AA.Familia = 98. учитывает только другое хранилище, если в предыдущем хранилище есть Stock = 0.
Если я выполню запрос с условным условием MIN, я получу StkValue, равное 8, что не так,, Мне нужно учитывать StkValue 154, поскольку он находится на складе A7 . Поэтому, если вы посмотрите на запрос, который я предоставил, я хочу получить следующий результат: Запрос на получение минимального значения StkValue -> Значение 25 (50/2) исходит от компонента (DIMM DDR3) снаименьший запас (это информация, которую мне нужно знать, сколько продуктов я могу собрать максимально), вместо того, чтобы получить этот Stock = 8, поскольку в этом случае мне действительно нужно учитывать склад со склада 'A7' для компонента с AA.Familia =98
Надеюсь, вы меня понимаете, я приложил все усилия, чтобы показать вам проблему и то, что я хочу / нужно сделать.
1-е редактирование: Это подзапрос!
2-е редактирование: Я изменил запрос на тот, который я использую, вместо того, чтобы показать вам запрос, предназначенный для продуктов AA.Familia = 98.
3-е редактирование: лучше объясненная проблема
4-е редактирование: изображение ниже и обновленный выше запрос соответствует тому, который я использую / пытаюсь обойти, чтобы получить решение.
Как видите, я обвел StockValues, мне нужноet для 3 различных продуктов (25;6;12). Тем не менее, значения, которые я получаю с ответом Джереми, 25;6;15.
Каждый компонент (SBC, CPU, RAM, HDD, DVDRW) имеет свой запас. Запас = 6 для второго продукта, потому что у нас уже есть два из этих компьютеров, поэтому с запросом, который мы пытаемся получить, Stock = 4 в основном.
Как я могу это сделать?
С наилучшими пожеланиями