[英]SQL - How do I SUM a GROUP BY recordset?
我對SQL不是那么強大,需要一些幫助來弄清楚如何獲得記錄集中返回的數字的計數。
到目前為止,這是我對查詢的了解程度:
SELECT DATEDIFF(m, originalretaildate, getdate()) AS age_in_months, count(email) AS number_of_valid_emails
FROM #result2
WHERE originalretaildate BETWEEN '20140415' AND GETDATE()
GROUP BY DATEDIFF(m, originalretaildate, getdate())
ORDER BY 1
這給了我以下結果:
age_in_months number_of_valid_emails
-----------------------------
0 63
1 2066
2 1528
3 2449
4 1882
5 1835
6 1772
7 2190
8 2321
9 2172
10 2635
11 1336
12 601
我需要得到的是所有這些數字的總和(總計)。 我很樂意把它放在底部,或者甚至只是回歸一個人。
所以像這樣:
age_in_months number_of_valid_emails
-----------------------------
0 63
1 2066
... ...
SUM 2129
任何幫助將非常感激。
它到了那里,我的SQL查詢現在看起來像這樣:
SELECT DATEDIFF(m, originalretaildate, getdate()) AS age_in_months,
count(email) AS number_of_valid_emails
FROM #result2
WHERE originalretaildate BETWEEN '20140415' AND GETDATE()
GROUP BY DATEDIFF(m, originalretaildate, getdate()) WITH ROLLUP
ORDER BY 2 ASC
這給了我這個:
0 65
--------
12 598
11 1329
2 1530
6 1777
5 1830
4 1875
1 2049
9 2176
7 2200
8 2319
3 2442
10 2631
NULL 22821
我現在的問題是它在最后一行顯示“NULL”。 任何想法如何解決這個問題,所以它說'總計'或'總和'?
根據我的理解,你想在底部總結價值觀。 您可以使用匯總來獲取底部的值總和。
SELECT DATEDIFF(m, originalretaildate, getdate()) AS age_in_months,
count(email) AS number_of_valid_emails
FROM #result2
WHERE originalretaildate BETWEEN '20140415' AND GETDATE()
GROUP BY DATEDIFF(m, originalretaildate, getdate()) with rollup
ORDER BY 1
它會產生像波紋管一樣的輸出。 在底部,所有值的總和
age_in_months number_of_valid_emails
-----------------------------
0 63
1 2066
2 1528
3 2449
4 1882
5 1835
6 1772
7 2190
8 2321
9 2172
10 2635
11 1336
12 601
null 22850
編輯1
根據您的編輯,您可以使用COALESCE
這樣做
SELECT COALESCE(DATEDIFF(m, originalretaildate, getdate()),'Total') AS age_in_months,
count(email) AS number_of_valid_emails
FROM #result2
WHERE originalretaildate BETWEEN '20140415' AND GETDATE()
GROUP BY DATEDIFF(m, originalretaildate, getdate()) with rollup
ORDER BY 1
編輯2
使用強制轉換為你的月份數,然后使用coalesce()
函數,這樣它就能以正確的方式投射它
cast(DATEDIFF(m, originalretaildate, getdate()) as nvarchar(10))
整個查詢將是這樣的
SELECT COALESCE(cast(DATEDIFF(m, originalretaildate, getdate()) as nvarchar(10)),'Total') AS age_in_months,
count(email) AS number_of_valid_emails
FROM #result2
WHERE originalretaildate BETWEEN '20140415' AND GETDATE()
GROUP BY DATEDIFF(m, originalretaildate, getdate()) with rollup
ORDER BY 1
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.