私はいくつかのレポートを作成する必要があるいくつかのデータをmysqlに持っています。私のデータは、次のクエリから来ている :日付と合計でmysql結果をピボット
SELECT StoreNbr,StoreName,Date, SUM(`Sales`) FROM sales_tbl GROUP BY StoreNbr,StoreName,Date;
これは、次のデータ(私の例のためだけの小さなサブセット)になり:
+-----------+---------------------------+----------------------------+
| StoreNbr | StoreName | Date | SUM(Sales) |
+-----------+---------------------------+----------------------------+
| 1112 | Store1 | 2016-01-16 | 115.09 |
| 1112 | Store1 | 2016-01-17 | 81.00 |
| 1113 | Store2 | 2016-01-16 | 112.44 |
| 1113 | Store2 | 2016-01-17 | 56.61 |
私はこのように私のデータを変換したいです方法:
+-----------+---------------------------+----------------------------+
| StoreNbr | StoreName | 2016-01-16 | 2016-01-17 |
+-----------+---------------------------+----------------------------+
| 1112 | Store1 | 115.09 | 81.00 |
| 1113 | Store2 | 112.44 | 56.61 |
は明らかにこのように実行される可能性があります行(店舗)と私のクエリとしてクエリで返される日付の未知数の数千人があるかもしれません(この意志
SELECT StoreNbr,StoreName,Date, SUM(`Sales`) FROM sales_tbl WHERE (Date BETWEEN '2016-01-10' AND '2016-05-10') GROUP BY StoreNbr,StoreName,Date;
これを行うにはいくつかの方法がありますが、どれも非常に単純ではありません。私はいくつかの調査を行いましたが、mysqlがピボッティングをサポートしていないという記述がいくつかあります。私はmariadbを実行していますが、mariadbは接続エンジンを介してピボットすることをサポートしています。私はそれを働かせることができませんでした(私のデータの公式の例を調整する)。 もう1つの方法はIFとケースですが、私が見いだしている答えのほとんどは、適応するのが非常に困難であるか、または質問する人に提供されるデータにのみ調整されています。 もう1つのアプローチは、データテーブルをフィードするエンドのjsonレスポンスを持っているので、配列上にデータが出力されるときにデータを処理することです。 - これはまだ私が把握できなかったと思う別のものです。
私は希望の出力を日付の量に依存しないようにする方法を探しています(そして、私は日付が週何か他のものに置き換えられるかもしれないと思います)。誰も助けることができますか?
$dateIndexedArray = array();
while($row = $stmt1->fetch(PDO::FETCH_ASSOC) {
$dateIndexedArray[$row['Date']] = 0;
}
ARRYがあなたを実行し
[
'2016-01-16' => 0,
'2016-01-17' => 0
]
次のようになります。
これは本当に素晴らしいレポートを提供することはできませんが、最も簡単な解決策はおそらくあなたのタグにリストされているPHPを使用することでしょう。 –
私は知っている!私はちょうど企業のニーズを実行しています:)そのマーケティングは5日間以上の店舗のパフォーマンスを見たいかもしれませんが、このデータは、画面上のグラフや輸出後にうまく使用することができます。 –
SQLは実際には良い報告言語ではありません。これは優れたデータ抽出言語です。ですから、現在のクエリを保存し、PHPなどの別の言語でレポートを作成する必要があります。 –