0

SQLに問題があります。

今、私はアイテムテーブルを持っていて、私が販売するアイテムの数を計算するつもりはありません、私がこのように一度に1つのアイテムを販売するならば、私はそれをすることができます:

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

しかし、私が同じアイテムを購入する場合、私たちはここで販売を購入してサブカウントし、0に等しくする必要があります

したがって、結果には2つのアイテムが表示される必要がありますが、group byを使用しており、同じアイテムの数を計算できません。

私の完全なクエリ:

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

今、リンゴの数は私に1no3を示さなければなりませ

SQLでこれを行うにはどうすればよいですか。

4

2 に答える 2

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です

于 2013-02-14T20:04:11.777 に答える
0

Count()は集計関数であり、テーブルに3つのリンゴがあります。1つだけを取得するには、データをIDで分割する必要があります。一意のID内にあるリンゴは1つだけです。何を求めているのかわからないので、おそらく分析関数を使用してこれを行う必要があります。最初のクエリでidでグループ化すると、出力でも1を取得する必要があります。

SELECT count(Quantity) AS ItemQ from item group by id;
于 2013-02-14T19:49:07.360 に答える