簡體   English   中英

SQL - 如何匯總GROUP BY記錄集?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM