0

私のプロジェクトは宝石店に関するもので、各製品カテゴリの利益を見つけようとしています。もっと具体的に言ってみましょう

情報を提供する3つのテーブルがあります。

SALES(salesid,productid,quantity,price)

salesid  productid   Quantity Price
11001    13001       4        5
11002    13002       6        10
11003    13003       5        16
.
.
11012    13012       7        15

RETURN(salesid,productid,date,quantity,price)

salesid  productid   Quantity Price
11003    13003       1        16
11007    13007       3        12
11008    13008       3        8

PROCUREMENT(調達 ID、製品 ID、数量、価格)

procurementid  productid   Quantity Price
100001         13001       10       2
100002         13002       10       2
.
. 
100012         13012       10       2

product_category(カテゴリID,カテゴリ)

categoryid  category
1           Gold
2           Silver
.
5           Platin

product(商品ID,カテゴリID)

Productid  categoryid
13001      1
13002      3
.
.
13010      5

利益は次のタイプから与えられます。

Profit=Quantity*Price(Sell)-Quantity*Price(Return)-Quantity*Price(Procurement)

そして今ここに問題があります..私はこれまでのところこれに行き着きました

SELECT categoryid,
       category,
       (coalesce(a.rev,0)- coalesce(b.ret,0),
                           coalesce(c.cost,0)) AS profit
FROM product category AS g
    JOIN product AS h ON g.categoryid = h.categoryid
    JOIN
      (SELECT categoryid,
              sum(quantity*price) AS rev
       FROM sales AS a,
            product AS b
       WHERE a.productid = b.productid
       GROUP BY categoryid) a
    LEFT OUTER JOIN
      (SELECT cartegoryid,
              sum(quantity*price) AS ret
       FROM RETURN AS a ,
                      product AS b
       WHERE a.productid = b.productid
       GROUP BY categoryid) b ON a.categoryid = b.categoryid
    LEFT OUTER JOIN
      (SELECT categoryid,
              sum(quantity*price) AS cost
       FROM procurement AS a,
            product AS b
       WHERE a.productid = b.productid
       GROUP BY categoryid) c ON a.categoryid = c.categoryid ,
    product AS d,
    procurement AS e
WHERE MONTH(f.date) = MONTH(e.date)
  AND YEAR(date) = 2013 

[並べてすみません、私はサイトに不慣れで、貼り付けコードをうまくコピーする方法がわかりません(:D)] これを行うと、次のような状態になります

categoryid  category  profit
1           Gold      -100
2           Silver    -100
.
5           Platin    -100

どこに問題があるのか​​ わかりません...私は多くの変更と切り替えを行いましたが、何も起こりません...どんな提案もとても役に立ちます.advaneでuに感謝します

4

1 に答える 1

0

最初は、利益計算式に余分なコンマが含まれているように見えます。これ

(coalesce(a.rev,0) - coalesce(b.ret,0),coalesce(c.cost,0)) as profit

これであるべき

coalesce(a.rev,0) - coalesce(b.ret,0) - coalesce(c.cost,0) AS profit

このクエリに関するその他の問題

  • コスト サブクエリを結合した後、where 句の直前に製品テーブルと調達テーブルを追加しますが、それらは結合しません。これによりデカルト結合が発生し、結果が失われます。
  • where 句では、使用するテーブルの日付フィールドを指定しません。またはAND YEAR(date) = 2013である必要があります。実行しようとすると、エラーが発生するはずです。e.datef.date
  • WHERE MONTH(f.date) = MONTH(e.date)f.date はどのテーブルを参照していますか? fどのテーブルにも別名を付けていません。
  • 調達に参加し、その日付フィールドを使用して結果を月ごとにフィルター処理しますが、収益、返品、およびコストのサブクエリの合計で日付が考慮されていません。これにより、結果が失われます。
于 2013-06-02T22:56:14.153 に答える