私は売上データのテーブルを販売日mm/dd/yyとして各行に持っています。月ごとのSQLグループ
私はクエリを作成しようとしているので、毎月の総売上がわかります。 月だけを指定する別の列を作成する必要がありますか?または、その日付形式から月がかかる方法がありますか?
私は売上データのテーブルを販売日mm/dd/yyとして各行に持っています。月ごとのSQLグループ
私はクエリを作成しようとしているので、毎月の総売上がわかります。 月だけを指定する別の列を作成する必要がありますか?または、その日付形式から月がかかる方法がありますか?
短い答えは:別の列は必要ありません。関数呼び出しの結果によってグループ化することができます。
この機能の詳細は、データベースに依存する可能性があり、フォーマット結果をどのようにしたいか、およびパフォーマンス上の考慮事項があります。
オラクルの両方の作業以下:(私は仮定を作っていたので、それが問題では実際にはなかったの上)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');
次のクエリが役立ちます。
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)