2016-04-06 24 views
0

私は現在、顧客の売上データを取得し、それを月と年で合計するSQLクエリを持っています。私がしたいのは、このデータを四半期ごとに集計することです。現在のクエリは次のとおりです。1年以内の値の合計

SELECT A.*, DATE_FORMAT(C.TxnDate, '%Y-%m') AS FormattedTxnDate, SUM(C.Quantity * D.TotalCost) AS COGS, SUM(C.Quantity * C.Amount) AS Revenue 
FROM customer_info A, invoices B, invoice_lines C, inventory D 
WHERE A.CustomerID = B.CustomerID 
AND B.TxnID = C.TxnID 
AND C.ItemID = D.ID 
AND B.TxnDate BETWEEN '2013-04-01' AND '2016-04-06' 
GROUP BY A.CustomerID, YEAR(B.TxnDate), MONTH(B.TxnDate) ASC 

私はに、クエリの最後の行を変更しようとしました:意図したように、これは動作しませんでした

GROUP BY A.CustomerID, YEAR(B.TxnDate), QUARTER(B.TxnDate) ASC 

。同じ四半期の値が合計されても、得られたFormattedTxnDateは、四半期の最初の月を売上情報とともに使用します(Q2の4月のような実際の最初の月には、 5月)。 DATE_FORMATを使用して月よりも四半期を表示する方法はありますか?私は%qオプションがあるかもしれないと思ったが、私は間違っていた。書式設定された日付で作業するのは可能ですが、単に四半期にした場合よりももっと面倒で迷惑になることに注意してください。

答えて

0

2つのGROUP-BYをもう一方の内部で実行します。

select [list attributes of A], year, quarter, sum(revenue) as revenue from 
    (SELECT A.*, 
      DATE_FORMAT(C.TxnDate, '%Y-%m') AS FormattedTxnDate, 
      SUM(C.Quantity * D.TotalCost) AS COGS, 
      SUM(C.Quantity * C.Amount) AS Revenue, 
      YEAR(B.TxnDate) as year, 
      QUARTER(B.TxnDate) as quarter 
    FROM customer_info A, invoices B, invoice_lines C, inventory D 
     WHERE A.CustomerID = B.CustomerID 
     AND B.TxnID = C.TxnID 
     AND C.ItemID = D.ID 
     AND B.TxnDate BETWEEN '2013-04-01' AND '2016-04-06' 
    GROUP BY A.CustomerID, YEAR(B.TxnDate), MONTH(B.TxnDate)) as RIP 
    GROUP BY [list all attributes of A], year, quarter 

個人的に私は最初にGROUP-BYを実行してから、カスタマーに参加します。

別のオプションは次のとおりです。で、あなたの元のクエリに四半期を追加するBの副問合せを行うセクションから:FROM ...

、請求書B、...

FROM ..., (select *, quarter(txndate) as quarter From Invoices) as B 

あなたは幸せにGROUPすることができます年までに、元のクエリの四半期

+0

私は2番目のオプションを試しました。それはうまくいかなかった。最初は、私は単に 'invoices B'の代わりにあなたの最後のコードの例をクエリに挿入しようとしましたが、前と同じ結果が得られました。私は 'B.TxnDate'を' B.Quarter'に変更して、値そのものが乱れてしまうように少し修正しました。私はそれが、今年の変化の中で、毎年一定の期間内にすべてを集計していると思う。 – user3521737

+0

GROUP BY A.CustomerID、YEAR(B.TxnDate)、quarter ASC – dmg

+0

これで今すぐ試みましたが、FormattedTxnDateはまだ私に四分の一を与えていません。四半期の最初の利用可能な年と月を示しています。 – user3521737

関連する問題