Идеи для достижения желаемых результатов в моем запросе

#sql

#sql

Вопрос:

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

Моя проблема в том, что у меня есть этот запрос, и он не показывает мне имеющееся количество, равное 0, и любое значение в двух других столбцах.

 select 
 item_location_view.qty_on_hand AS 'Qty on Hand', 
 item_location_view.qty_allocated AS 'Qty Allocated', 
 item_location_view.qty_backordered AS 'Qty Backordered'
FROM 
  dbo.inv_mast inv_mast, 
  dbo.item_location_view item_location_view    
WHERE 
  inv_mast.item_id = item_location_view.item_id AND
  ((item_location_view.qty_on_hand>=0) AND 
  (item_location_view.qty_allocated>0) AND
  (item_location_view.qty_backordered>0))
  

Спасибо вам всем

Комментарии:

1. Во-первых, не используйте старую нотацию join. Продвигая использование explict JOIN sintaxis, Аарон Бертран написал об этом замечательную статью «Вредные привычки, от которых нужно избавиться: использование объединений в старом стиле» .

2. вы должны получать результаты до тех пор, пока выполняются 2 других ваших критерия, поскольку все ваши условия связаны с AND s. Есть ли у вас хотя бы одна строка с OnHand = 0, Alloc> 0 и backordered> 0? Если нет, вы не увидите никаких результатов. Попробуйте прокомментировать свои условия распределения и обратного упорядочения и посмотрите, получите ли вы ожидаемые результаты.

Ответ №1:

Похоже, вам нужны изменения AND для OR

 select     
     ilv.qty_on_hand AS 'Qty on Hand', 
     ilv.qty_allocated AS 'Qty Allocated', 
     ilv.qty_backordered AS 'Qty Backordered'    
FROM dbo.inv_mast inv
JOIN dbo.item_location_view ilv
ON  inv.item_id = ilv.item_id 
WHERE (
            (item_location_view.qty_on_hand>=0)
         OR (item_location_view.qty_allocated>0) 
         OR (item_location_view.qty_backordered>0)
      )
  

возможно, 2-й вариант

 WHERE  item_location_view.qty_on_hand >= 0 
  AND (  
            item_location_view.qty_allocated > 0
        OR  item_location_view.qty_backordered > 0
      )