我有一張銷售數據表,每行顯示銷售日期mm/dd/yy。SQL按月份組
我試圖創建一個查詢,所以我可以看到我有每個月的總銷售額。 我是否必須創建一個單獨的只指定月份的列?或者有沒有一種方法可以採用該日期格式的月份?
我有一張銷售數據表,每行顯示銷售日期mm/dd/yy。SQL按月份組
我試圖創建一個查詢,所以我可以看到我有每個月的總銷售額。 我是否必須創建一個單獨的只指定月份的列?或者有沒有一種方法可以採用該日期格式的月份?
簡短的回答是:你不需要一個單獨的列。你可以通過函數調用的結果進行分組。
該函數可能依賴於數據庫的詳細信息,您希望格式化結果的方式以及性能注意事項。
下在Oracle中都工作:
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:
YYYY-MM Amount
------- ----------------------
2016-01 24
2016-02 12
2016-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)
輸出:
MM Amount
---- ----------------------
01 24
02 12
03 12
(3 row(s) affected)