2015-10-20 18 views
0

У меня есть 3 таблицыКак получить общее количество продуктов на каждом складе?

#Products [Pro_ID] ,[Pro_Name], 
#Stock [Stock_ID] ,[Pro_ID],[Warehouse_ID] ,[Qty] ,[Status] 
Warehouse [Warehouse_ID] ,[Name] 

Я делаю доклад для моего проекта asp.net, который показывает общее количество продуктов, которые мы имеем в каждом складе. Я пробовал этот запрос, который ничего не показывает, кроме Pro_ID, написанного как заголовок без данных (0 строк затронуто).

SELECT Pro_ID from Stock 
where Qty > 0 
GROUP BY Pro_ID 
HAVING COUNT(*) = (SELECT COUNT(*) FROM Warehouse) 

Это то, что я недавно в наличии Stock table

+0

что о внутреннем соединении на склад и склад? Тогда вам нужно только выбрать count (*), group By Pro_ID –

+1

'HAVING COUNT (*) = (SELECT COUNT (*) FROM Warehouse)' фильтрует все ваши результаты - вы запрашиваете идентификаторы с одинаковым номером строк как всей таблицы. – MikeTheLiar

+0

@ SergioIvanuzzo .. вы можете разместить его как ответ, а не комментарий –

ответ

0

если вы просто хотите, чтобы получить то, что есть в каждом складе:

SELECT w.Name, sum(s.Qty) 
FROM Stock s 
INNER JOIN Warehouse w 
ON s.Warehouse_ID = w.Warehouse_ID 
GROUP BY w.Warehouse_ID,w.Name 
+0

Отлично, он работает .... Большое вам спасибо :) –

0
SELECT 
    Warehouse.[Warehouse_ID], 
    Warehouse.[Name] 
    #Products.[Pro_ID], 
    #Products.[Pro_Name], 
    #Stock.[Stock_ID], 
    #Stock.[Qty], 
    #Stock.[Status] 
FROM 
    #Stock 
    LEFT OUTER JOIN Warehouse ON #Stock.[Warehouse_ID] = Warehouse.[Warehouse_ID] 
    LEFT OUTER JOIN #Products ON #Stock.[Pro_ID] = #Products.[Pro_ID] 

Обратите внимание, что, начиная с #Stock и внешним присоединением к двум основным таблицам, вы только получить результаты, для которых у вас есть фактические записи в Таблица #Stock. Если вы хотите, чтобы все продукты находились на всех складах, вы должны выбрать FROM Warehouse CROSS JOIN #Products, чтобы получить каждую комбинацию продукта и склада, а затем внешнее соединение, которое находится в вашей таблице #Stock, чтобы получить записи там, где они есть, и использовать нулевую замену для нулевых нулей, где у вас не было записи в ваш #Stock стол.

0

Попробуйте это:

SELECT COUNT(*) from Stock s 
INNER JOIN Warehouse w ON s.warehouse_id = w.warehouse.id 
where s.Qty > 0 
GROUP BY Pro_ID 
+0

Это показывает мне это, а не мой вывод, который мы хотим http://snag.gy/InriP.jpg –

+1

Итак, вам нужно изменить условие GROUP BY. try group by warehouse_id –

0

Ваш вопрос немного неясно. Вы ищете количество товаров по каждому продукту на каждом складе? Если да, то этот запрос должен работать для вас:

SELECT 
    warehouse_id, pro_id, SUM(qty) AS quantity 
FROM #stock 
WHERE Qty > 0 
GROUP BY 
    warehouse_id, pro_id 
+0

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

+0

Можете ли вы привести пример того, какой результат вы хотели бы видеть? – dfundako

+0

Like Warehouse 1 - ABC = 100 Продукты Склад 2 - XYZ = 234 Продукты Я имею в виду общее количество товаров, которые есть у каждого склада? –

Смежные вопросы