【发布时间】:2010-11-17 22:43:33
【问题描述】:
我有一个MEMBERS 表,其中包含以下相关列:
Name
JoinDate
Level --1=Gold,2=Silver,3=Bronze**
我想创建一个查询来返回一个会员摘要,其中列出了按年份和会员级别加入的总数。基本上,我的结果集中的列是这样的:
| YEAR | GOLD | SILVER | BRONZE | TOTAL |
我可以使用以下 3 个查询分别获得 Gold、Silver 和 Bronze 会员每年的不同计数:
SELECT YEAR(JoinDate) AS YEAR, COUNT(*) AS GOLD FROM Members
WHERE Level=1 GROUP BY YEAR(JoinDate) ORDER BY YEAR(JoinDate)
SELECT YEAR(JoinDate) AS YEAR, COUNT(*) AS SILVER FROM Members
WHERE Level=2 GROUP BY YEAR(JoinDate) ORDER BY YEAR(JoinDate)
SELECT YEAR(JoinDate) AS YEAR, COUNT(*) AS BRONZE FROM Members
WHERE Level=3 GROUP BY YEAR(JoinDate) ORDER BY YEAR(JoinDate)
我也可以使用类似的查询获得总数:
SELECT YEAR(JoinDate) AS YEAR, COUNT(*) AS TOTAL FROM Members
GROUP BY YEAR(JoinDate) ORDER BY YEAR(JoinDate)
我的问题是我还没有找到将所有这些简化为单个查询的方法。这是怎么做到的?
【问题讨论】:
标签: sql sql-server join group-by