2013-11-11 3 views
0

У меня есть таблицы ProdBiscuit Как tb и StockData As sd, мне нужно получить сумму количества в StockData (quantite) с условием if (sd.status> 0 AND sd .prodid = tb.id И sd.matcuisine = 3)Получите сумму, сравнивая две таблицы

Вот мой SQL запрос

SELECT tb.id, tb.nom, tb.proddate, tb.qty, tb.stockrecno 
FROM ProdBiscuit AS tb 
JOIN 

(SELECT id, prodid, matcuisine, status, SUM(quantite) AS rq FROM StockData) AS sd 
ON (tb.id = sd.prodid AND sd.status > 0 AND sd.matcuisine = 3) LIMIT 25 OFFSET @Myid 

Это не дает мне ни одной строки на всех?

Существует только 3 ряда в ProdBiscuit и 11 строк в Stockdata, и в StockData есть только 2 строки с условием.

И как показано на рисунке, есть только два ряда, которые дают условие.

Image of two tables

Что плохого в моем запросе?

PS: Зеленые линии на изображении показывают условие в моем запросе.

+0

Что такое значение '@ Myid' – Lock

+0

Первой проблемой, которую я вижу, является запрос, к которому вы присоединяетесь, не имеет группы по выражению: Yo u должен иметь 'GROUP BY id, prodid, matcuisine, status' после' FROM StockData' – AgRizzo

+0

@Lock Myid - это индекс для отображения в 25 строк, начиная с Myid. Поскольку существует только 3 строки, это не влияет на запрос. –

ответ

2

Пожалуйста, проверьте это. Если вы не получаете желаемые результаты, перейдите на SQLFiddle.com и создайте таблицы примеров с данными, чтобы упростить определение того, что вы хотите.

SELECT tb.id, tb.nom, tb.proddate, tb.qty, tb.stockrecno, SUM(sd.quanite) 
FROM ProdBiscuit AS tb 
JOIN StockData AS sd 
    ON tb.id = sd.prodid 
WHERE sd.status > 0 AND sd.matcuisine = 3 
GROUP BY tb.id, tb.nom, tb.proddate, tb.qty, tb.stockrecno 
+0

Вот тест в sqlfiddle http://www.turcguide.com/stack/query .txt –

+0

Спасибо, что работает отлично. Я забыл о paranthesis, поэтому я не смог получить результат вашего запроса благодаря большому количеству –

0
SELECT tb.id, tb.nom, tb.proddate, tb.qty, tb.stockrecno, SUM(quantite) As rq 

FROM ProdBiscuit AS tb 

JOIN StockData AS sd ON (tb.id = sd.prodid AND sd.status > 0 AND sd.matcuisine = 3) 
OR (tb.id = sd.prodid AND sd.status = 0 AND sd.matcuisine = 3) 
GROUP BY tb.id, tb.nom, tb.proddate, tb.qty, tb.stockrecno 

Этот запрос дает мне эту

ID NOM     QTY  RQ 
1 Biscuit Chocolat  100  100 
2 Biscuit Moutarde  120  226 
3 Biscuit Pain Epice  100  100 

И Happy End с помощью @AgRizzo я сделал небольшое изменение и добавление для имеющих точное отображение:

SELECT tb.id, tb.nom, tb.proddate, tb.qty, tb.stockrecno, 

SUM(IF((status>0 AND tb.id=sd.prodid),quantite,0)) As rq FROM ProdBiscuit AS tb 

JOIN StockData AS sd ON (tb.id = sd.prodid AND sd.status > 0 AND sd.matcuisine = 3) 
OR (tb.id = sd.prodid AND sd.status = 0 AND sd.matcuisine = 3) 
GROUP BY tb.id, tb.nom, tb.proddate, tb.qty, tb.stockrecno 



ID NOM     QTY  RQ 
1 Biscuit Chocolat  100  100 
2 Biscuit Moutarde  120  14 
3 Biscuit Pain Epice  100  100 

Code for displaying the "rq" is: 

QtyLst.Items.Add((Convert.ToInt16(reader["qty"])- Convert.ToInt16(reader["rq"])).ToString()); 
Смежные вопросы