2017-04-19 3 views
-1

当日の各部門の売上の合計を示すクエリを作成しました。データを月の個々の日に列として入力します。

私が望むのは、1か月のマスタークエリを使用してこのデータを生成することです。

この

は、私が見ることを期待結果である:

Department No Department Name 1-April 2-April 3-April 
1    Infants   100  112  96 
2    Kids    120  132  123 
Total Total      220  144  219 

現在、私は一日だけのためにこれを生成することができ、私は次の日のためのデータを取得するために、日付の値を変更しておく必要があります。

前述のように、1か月間、これを1つのマスタークエリで実行したいとします。

+1

サンプルテーブルのデータと現在のコード/クエリを追加します。 – jarlh

+3

質問の質を向上させるには、使用しているコードとサンプルデータを含むテーブルのフィールドを表示してください。また、これまでに開発したコードをお見せください。最後に、これらのテーブルを作成して作成するためのスクリプトを含めることができれば、状況を容易に再現することができます。 – toonice

+0

これは私が毎日の売上 SELECT部署名、部署 いいえ、 合計を生成するために使用するコードです(総売上)* - 1品目マスター 日=「2017年4月1日」 GROUP BY部門のNet_Amount として名前、部門番号 – Sequel3

答えて

-2

あなたはこのようなもので、日付の範囲を制御することができます

select (...) where v_date >= 1-April and v_date <= 30-April 

(日付形式で列の名前と1-4月v_date考える)

+0

私は欲しいものを得ることはできませんRui – Sequel3

+0

その擬似コードは、指定された期間内にあるレコードの指定フィールドしか取得しません。 'Sequel3'は日付値がフィールドそのものになるように求めています。その日付のSalesとその部門が作成されたフィールドを満たす合計です。 – toonice

+0

申し訳ありませんが、説明のおかげで。 私は間違っていると思います。 – rtrigo

0

次のことを試してみてください...

この試行は、mysql select dynamic row values as column names, another column as valueにあるコードに基づいています。私は問題であるgroup_concat_max_len変数が心配です。もしそうなら、私はCASEメソッドの研究を進めていくつもりです。それが問題でなければ、私は物事を少し楽にします。

ここの行のほとんどは、実際には1つのSQL文を形成します。最後にサブクエリによって構築されたsalesDateの値のリストを取得し、データベースに対して実行されるSQL文を含むかなり長い文字列の作成に役立ちます。

文字列は、CONCAT()の引数として指定された部分文字列のリストから構成されます。これはhttps://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_concatで読むことができます。

文字列は、テーブルdepartmentからフィールドiddepartmentNameは、その部門の各日付の売上高のSUM()続く、レコードごとに選択された最初であることを指定することによって開始します。各日付フィールドにはdate_09_Marchのような名前が付けられ、出力には9-Marchのような見出しが付けられます。

GROUP_CONCAT関数を使用すると、文字列の繰り返し部分が得られます。これはhttps://dev.mysql.com/doc/refman/5.7/en/group-by-functions.html#function_group-concatで読むことができます。

フィールドが指定された後の文字列は、各インスタンスにdate_09_Marchようなエイリアスが与えられ、その上に接合され、値は、各日付のdepartmentSalesテーブルのインスタンスとdepartmentLEFT JOIN EDから形成された一時テーブルから来るべきであることを指定department_idフィールドをidフィールドのdepartmentに設定します。

一時テーブルが作成されると、一時テーブルのレコードはdepartment.idでグループ化され、各部門の合計が計算されます。出力はdepartment.idでソートされます。

このソートされた出力とその列見出しを生成するために使用されるステートメントは、合計行を生成するために使用される別の(やや簡単な)ステートメントに結合されます。各部分文字列の連結によって形成されたSQL文を含む文字列は、変数@salesQueryに割り当てられ、準備され、実行されます。

ご不明な点がございましたら、お気軽にコメントを投稿してください。

さらに読書

https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html私はピボット機能に基づいてクエリを記述するために管理し、すべての答えを

+0

説明が追加されました。また、ここでは 'targetDate'と呼ばれる日付の月のものだけに選択された日付を制限する' WHERE'節を含むようにコードが改訂されました。 'targetDate'はその月のどの日付でもかまいません。 – toonice

0

おかげ (使用DATE機能の詳細については)。

関連する問題