2016-08-02 7 views
-3

こんにちは私は以下のクエリを使用して設定するカスタム日付にトランザクションベースごとの売上を表示するデータベースの簡単なクエリを持っています。SQL:Month over Monthクエリ

例iは日付を選択し、設定した日付にレポートベースを表示します。

クエリ

$strSQL = "SELECT IFNULL(`ProductName`, 'Total') AS 'ProductName',` 
        Closed On`, 
        SUM(`Quantity`) as Quantity , 
        SUM(`Price Paid`) as Price 
FROM `".$user."_products` 
WHERE DATE(`Closed On`) >= '$datefrom' 
AND DATE(`Closed On`) <='$dateto' 
GROUP by `ProductName` with ROLLUP"; 

既存の出力

--------------------------------------- 
    |Product Name |Quantity |Total Sales | 
    --------------------------------------- 
    |Shoes  | 12  | 1000  | 
    |Tshirt  | 232  | 2312  | 
    |Total  | 352  | 3312  | 
    --------------------------------------- 

既存しかし、私は月以上の出力例は、(1月 - 12月)で月ごとに私のテーブルを照会する

-------------------------------------------- 
    |Product Name |Jan |Feb | March| Total | 
    -------------------------------------------- 
    |Shoes  | 500 | 1000 | 215 | 121542 | 
    |Tshirt  | 232 | 2312 | 1235 | 123123 | 
    -------------------------------------------- 

ありがとう!

答えて

0

条件付き合計でこれを行うことができます。毎月のためには、行は、その月のためであるので、あなたは合計したい値を、使用している場合ではないあなただけの、よりトリッキーになる年でこう0

$strSQL = "SELECT IFNULL(`ProductName`, 'Total') AS 'ProductName',` 
        Closed On`, 
        SUM(IF(MONTH(`Closed On`) = 1, `Quantity`, 0)) AS `Jan`, 
        SUM(IF(MONTH(`Closed On`) = 2, `Quantity`, 0)) AS `Feb`, 
        SUM(IF(MONTH(`Closed On`) = 3, `Quantity`, 0)) AS `Mar`, 
        SUM(IF(MONTH(`Closed On`) = 4, `Quantity`, 0)) AS `Apr`, 
        SUM(IF(MONTH(`Closed On`) = 5, `Quantity`, 0)) AS `May`, 
        SUM(IF(MONTH(`Closed On`) = 6, `Quantity`, 0)) AS `Jun`, 
        SUM(IF(MONTH(`Closed On`) = 7, `Quantity`, 0)) AS `Jul`, 
        SUM(IF(MONTH(`Closed On`) = 8, `Quantity`, 0)) AS `Aug`, 
        SUM(IF(MONTH(`Closed On`) = 9, `Quantity`, 0)) AS `Sep`, 
        SUM(IF(MONTH(`Closed On`) = 10, `Quantity`, 0)) AS `Oct`, 
        SUM(IF(MONTH(`Closed On`) = 11, `Quantity`, 0)) AS `Nov`, 
        SUM(IF(MONTH(`Closed On`) = 12, `Quantity`, 0)) AS `Dec`, 
        SUM(`Quantity`) as Quantity , 
        SUM(`Price Paid`) as Price 
FROM `".$user."_products` 
WHERE DATE(`Closed On`) >= '$datefrom' 
AND DATE(`Closed On`) <='$dateto' 
GROUP by `ProductName` with ROLLUP"; 

EDIT

使用している場合かどうかを確認します。 1オフとして、上記とほぼ同じです。月よりむしろ年をチェックするだけです。しかし、これがオンラインレポートの場合は、おそらく年のウィンドウが動くようにしたいと考えています(つまり、今年は2011年から2016年に興味がありますが、2020年はおそらく2015年から2020年に移行しました)。この場合、おそらくphp(あるいはMySQLストアドプロシージャ)でクエリを動的に構築する必要があります。これにはいくつかの方法がありますが、それらは依然として面倒です(返される列名を実際に変更することはできません。返す列名を指定するには、あらかじめクエリを変更する必要があります)。

基本クエリ: -

$strSQL = "SELECT IFNULL(`ProductName`, 'Total') AS 'ProductName', 
        `Closed On`, 
        SUM(IF(YEAR(`Price Paid`) = 2006, `Quantity`, 0)) AS `2006`, 
        SUM(IF(YEAR(`Price Paid`) = 2007, `Quantity`, 0)) AS `2007`, 
        SUM(IF(YEAR(`Price Paid`) = 2008, `Quantity`, 0)) AS `2008`, 
        SUM(IF(YEAR(`Price Paid`) = 2009, `Quantity`, 0)) AS `2009`, 
        SUM(IF(YEAR(`Price Paid`) = 2010, `Quantity`, 0)) AS `2010`, 
        SUM(IF(YEAR(`Price Paid`) = 2011, `Quantity`, 0)) AS `2011`, 
        SUM(IF(YEAR(`Price Paid`) = 2012, `Quantity`, 0)) AS `2012`, 
        SUM(IF(YEAR(`Price Paid`) = 2013, `Quantity`, 0)) AS `2013`, 
        SUM(IF(YEAR(`Price Paid`) = 2014, `Quantity`, 0)) AS `2014`, 
        SUM(IF(YEAR(`Price Paid`) = 2015, `Quantity`, 0)) AS `2015`, 
        SUM(IF(YEAR(`Price Paid`) = 2016, `Quantity`, 0)) AS `2016`, 
        SUM(IF(YEAR(`Price Paid`) = 2017, `Quantity`, 0)) AS `2017`, 
        SUM(`Quantity`) as Quantity , 
        SUM(`Price Paid`) as Price 
FROM `".$user."_products` 
WHERE DATE(`Closed On`) >= '$datefrom' 
AND DATE(`Closed On`) <='$dateto' 
GROUP by `ProductName` with ROLLUP"; 
+0

こんにちは私はこのクエリを使用しますが、それは量ではない総売上 – Skieth

+0

@Skiethを示して - あなたはそのための出力を望むもので、テーブル宣言していくつかのサンプルデータを置くことができますサンプルデータ。それから私は試してみることができます。現時点で私ができることは、推測です – Kickstart

+0

ありがとう私は価格の代金を支払う代わりにお返事をいただきありがとうございます。 – Skieth