次のクエリを使用して、売上高を取得しています。問題は、間違ったデータを返すことです。
3 つのテーブルを結合していtbl_orders
tbl_orderitems
tbl_payment
ます。tbl_orders
テーブルには概要情報、注文tbl_orderitems
された商品、およびtbl_payment
注文に関する支払い情報が保持されます。各注文に対して複数の支払いを行うことができます。
アイテムの合計と、sum(mon_orditems_pprice)
販売されたアイテムの量を取得しようとしていますcount(uid_orderitems)
。
特定の注文番号に対して次のクエリを実行すると、注文アイテムが 1 つあることがわかっています。カウント 2 と 2 つの項目の合計を返します。
Item ProdTotal ProdCount
Westvale Climbing Frame 1198 2
この注文には、テーブルに 2 つの支払いレコードが保持されているためtbl_payment
、二重カウントが発生しています。支払いテーブルの結合を削除すると、正しい数値が報告されます。または、単一の支払いを持つ注文を選択すると、同様に機能します。私は何かが足りないのですか、私は疲れています!!!??
SELECT
txt_orditems_pname,
SUM(mon_orditems_pprice) AS prodTotal,
COUNT(uid_orderitems) AS prodCount
FROM dbo.tbl_orders
INNER JOIN dbo.tbl_orderitems ON (dbo.tbl_orders.uid_orders = dbo.tbl_orderitems.uid_orditems_orderid)
INNER JOIN dbo.tbl_payment ON (dbo.tbl_orders.uid_orders = dbo.tbl_payment.uid_pay_orderid)
WHERE
uid_orditems_orderid = 61571
GROUP BY
dbo.tbl_orderitems.txt_orditems_pname
ORDER BY
dbo.tbl_orderitems.txt_orditems_pname
助言がありますか?
ありがとうございました。
表の列のドリルダウン
dbo.tbl_payment.bit_pay_paid (1/0) Has this payment been paid, yes no
dbo.tbl_orders.bit_order_archive (1/0) Is this order archived, yes no
dbo.tbl_orders.uid_order_webid (integer) Web Shop's ID
dbo.tbl_orders.bit_order_preorder (1/0) Is this a pre-order, yes no
YEAR(dbo.tbl_orders.dte_order_stamp) (2012) Sales year
dbo.tbl_orders.txt_order_status (varchar) Is the order dispatched, awaiting delivery
dbo.tbl_orderitems.uid_orditems_pcatid (integer) Product category ID