我对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'。任何想法如何解决这个问题,所以它说'总计'或'总和'?
答案 0 :(得分:3)
根据我的理解,你想在底部总结价值观。您可以使用汇总来获取底部的值总和。
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