2017-08-29 19 views
0

私は売上データのテーブルを販売日mm/dd/yyとして各行に持っています。月ごとのSQLグループ

私はクエリを作成しようとしているので、毎月の総売上がわかります。 月だけを指定する別の列を作成する必要がありますか?または、その日付形式から月がかかる方法がありますか?

答えて

0

短い答えは:別の列は必要ありません。関数呼び出しの結果によってグループ化することができます。

この機能の詳細は、データベースに依存する可能性があり、フォーマット結果をどのようにしたいか、およびパフォーマンス上の考慮事項があります。

オラクルの両方の作業以下:(私は仮定を作っていたので、それが問題では実際にはなかったの上)

SELECT extract(YEAR FROM ae.saledate), extract(MONTH FROM ae.saledate), count(*) 
FROM mytable ae 
GROUP BY extract(YEAR FROM ae.saledate), extract(MONTH FROM ae.saledate); 

SELECT TO_CHAR(ae.saledate, 'YYYY-MM'), count(*) 
FROM mytable ae 
GROUP BY TO_CHAR(ae.saledate, 'YYYY-MM'); 

編集が今年無視バージョンを追加し、月だけを見て:

SELECT extract(MONTH FROM ae.saledate), count(*) 
FROM mytable ae 
GROUP BY extract(MONTH FROM ae.saledate); 

SELECT TO_CHAR(ae.saledate, 'MM'), count(*) 
FROM mytable ae 
GROUP BY TO_CHAR(ae.saledate, 'MM'); 
0

次のクエリが役立ちます。

CREATE TABLE #TEMP 
(SalesDate DATETime, 
Amount float 
) 
INSERT INTO #TEMP 
SELECT '2016-01-12', 12 
UNION 
SELECT '2016-01-13', 12 
UNION 
SELECT '2016-02-12', 12 
UNION 
SELECT '2016-03-12', 12 

SELECT CONVERT(VARCHAR(7), SalesDate, 120) AS 'YYYY-MM', 
SUM(Amount) as 'Amount' 
FROM #Temp 
GROUP BY CONVERT(VARCHAR(7), SalesDate, 120) 

OUTPUT:

MM Amount 
---- ---------------------- 
01 24 
02 12 
03 12 

(3 row(s) affected) 
:のみ月ワイズ

SELECT RIGHT(CONVERT(VARCHAR(7), SalesDate, 120), 2) AS 'MM', 
sum(Amount) as 'Amount' 
from #Temp 
group by RIGHT(CONVERT(VARCHAR(7), SalesDate, 120), 2) 

出力のための

YYYY-MM Amount 
------- ---------------------- 
2016-01 24 
2016-02 12 
2016-03 12 

(3 row(s) affected) 

関連する問題