2013-02-14 84 views
0

我在SQL中遇到问题。要计算相同项目的计数

现在我有项目表,并惯于计算我出售,我能做到这一点的项目的数量,如果我出售一个项目一次这样的:

SELECT count(Quantity) AS ItemQ from item group by item_name 

,但如果我买同样的项目,我们必须在这里分销售与购买和计数等于0

所以我们必须结果显示我2项,但我使用组和我不能计算同一项目的计数。

我的全部查询:

SELECT count(billsItems_Quantity) AS ItemQ , billsItems_ItemDiscount , billsItems_ItemName , billsItems_Price , billsItems_SecondPrice , billsItems_ItemTotal ,bills_StoreID , bills_UserID , bills_ID , billsItems_BillItemSerial, cashier_trans_DocId , billsitems_ItemID , billsItems_Barcode 
FROM bills , billsitems , cashier_trans 
WHERE 
bills.bills_ID = billsitems.billsItems_BillItemSerial 
and bills.bills_ID = cashier_trans.cashier_trans_DocId 
and bills.bills_StoreID = '$ausers_StoreId' 
and bills.bills_UserID = '$ausers_ID' 
and bills.bills_Status = '1' 

项目的表是

id  item_name bill_type count_item price_item 

1  apple  sale   1    20 

2  apple  buy   1    15 

3  tea  sale   1    10 

4  apple  sale   1    20 

现在苹果的数量必须给我看没有

我怎么能在SQL中执行此操作。

+0

您可以提供您的表结构和样本数据? – sgeddes 2013-02-14 19:19:42

回答

1

所有COUNT首先给出了结果集的行数。因此,要计算总数量,您需要使用SUM集合。

我们找到你总在你的项目,你可以做这样的事情:

SELECT MIN(id), n.item_name, SUM(qty) AS `qty` FROM 
(
SELECT MIN(id) AS id, item_name, SUM(count_item) AS `qty` 
    FROM item 
WHERE bill_type = 'sale' 
GROUP BY item_name 
UNION ALL 
SELECT MIN(id) AS id, item_name, -SUM(count_item) AS `qty` 
    FROM item 
WHERE bill_type = 'buy' 
GROUP BY item_name 
) n 
GROUP BY item_name 

产生以下输出:

| ID | ITEM_NAME | QTY | 
------------------------ 
| 1 |  apple | 1 | 
| 3 |  tea | 1 | 

下面是sqlfiddle

0

Count()是集合函数,您的表中有3个苹果。要获得只有一个,你需要通过id对数据进行分区 - 唯一ID中只有一个苹果。你可能应该使用分析函数来做到这一点,因为我不清楚你在问什么。如果按你的第一个查询ID,你也应该在输出得到1:

SELECT count(Quantity) AS ItemQ from item group by id; 
+0

好:)现在必须减去采购的销售额,以带来你所购买的产品我该怎么做 – 2013-02-14 20:01:52

+0

@Zamalek - 非常抱歉泛Zamalek,我无法理解你的问题。减去什么?我认为你应该接受Peterm的回答。 – Art 2013-02-14 20:04:41