0

これは私が達成しようとしている最終結果です:

特定の日付 (たとえば今月) における各州の各製品の販売数量の集計

             District State A   District State B 
Product A                 356                934
Product B                 343                232

シナリオ

明確にする必要がある次の点があります。

  • 私のシステムは稼働しているので、次の更新までスキーマを変更するのは難しいでしょう。
  • たとえば、カンザス州やテキサス州など、 「」として知られる地区があります。
  • 「製品」と呼ばれる製品のテーブルがあり、価格は関連付けられていません
  • 「州」および「製品」テーブルへのリンクを含む州の製品価格で構成されるテーブルがあり、「価格列」が追加されています。したがって、各州には、製品リストの独自の価格があります。
  • 「エージェント」と呼ばれる顧客をそれぞれ特定の州に接続して、(私のアプリケーションで) 注文プロセス中に州の製品価格表から取得した正しい製品価格が各エージェントに請求されるようにします。
  • 注文が行われた日付が同じ注文テーブルに記録された、エージェントによって行われた注文で構成される注文テーブルがあります。この表には、購入した製品のリストは含まれていません。そのための次のテーブルがあります (orderLines テーブル)
  • 注文テーブルからの1つの注文に接続された販売数量で購入されたすべての製品を格納するOrderlinesテーブルがあります。そのため、注文ごとに多くのオーダーラインが存在する可能性があります。

次の表は次のようになります。

状態表

State_Id
State_Name

製品表

Product_Id
Product_Name

州の製品価格表

StateProduct_Id
State_Id - referenced to states table
Product_Id - linked to products table
StateProduct_Price

エージェント テーブル

Agent_Id
Agent_Name
State_Id - linked to states table

注文表

Order_Id
Agent_Id
Order_DatePurchased - in the end this date is what will be used to calculate the total quantity of products sold within a certain date

注文明細テーブル:

OrderLine_Id 
Order_Id - linked to the orders table
Agent_Id - linked to the agents table
Product_Id - linked to the products table not products state table
OrderLine_ProductNameATOP - at time of purchase
OrderLine_QuantitySoldATOP - at time of purchase

レポートで使用される製品 ID によって参照される特定の製品の販売数量を取得するために使用されるのは、注文明細テーブルです。

上記のレポートを作成するにはクエリが必要です。

このレポートを取得するにはどうすればよいですか?! 誰かが助けてくれることを願っています。誰かが私のためにそれをしてくれるとは思っていません。説明だけでも結構です

4

1 に答える 1

2

クロス集計レポートが必要ですが、これは MySQL で作成するのが最も簡単ではありません。

以下は、1 月の結果セットを取得するためのクエリ (未テスト) です。

Select 
   OrderLines.Product_Id,
   States.State_Name,
   Sum(OrderLines.OrderLine_QuantitySoldATOP) as Quantity
From ( (
   OrderLines 
      Inner Join Orders on OrderLines.Order_Id = Orders.Order_Id )
      Inner Join Agents on OrderLines.Agent_ID = Agents.Agent_ID )
      Inner Join States on Agents.State_Id = States.State_Id 
Where 
   Orders.Order_DatePurchased >= '2013-01-01' and
   Orders.Order_DatePurchased < '2013-02-01' 
Group by 
   OrderLines.Product_Id,
   States.State_Name

次に、クロスタブでフォーマットする必要があります。このリンクをクリックすると、ストアド プロシージャを使用して上記のクエリの結果セットを必要なレイアウトに変換する方法を説明するページが表示されます。

http://www.danradigan.com/wordpress/2011/03/pivot-tables-in-mysql/
于 2013-04-24T19:33:19.213 に答える