SQL Server中查询1985-2016年每年自杀人数前三国家并转置
SQL Server实现按年份分组的自杀人数前三行转列查询
要得到你需要的行转列结果,可通过统计排名+条件聚合的方式实现,无需依赖类似PostgreSQL的CROSSTAB函数,具体步骤如下:
1. 先统计每年各国家的自杀人数并排名
通过CTE(公用表表达式)完成分组统计,并为每个年份内的国家按自杀人数降序排名:
WITH SuicideStats AS ( SELECT Year, Country, SUM(SuicideCount) AS TotalSuicides, -- 按年份分区,按自杀人数降序生成名次 ROW_NUMBER() OVER (PARTITION BY Year ORDER BY SUM(SuicideCount) DESC) AS RankNum FROM YourTableName -- 替换为你的实际表名 GROUP BY Year, Country )
2. 条件聚合实现行转列
基于上面的统计结果,用CASE配合聚合函数提取每年的前三名次,拼接成“国家 - 人数”的格式:
SELECT Year, MAX(CASE WHEN RankNum = 1 THEN CONCAT(Country, ' - ', TotalSuicides) END) AS First, MAX(CASE WHEN RankNum = 2 THEN CONCAT(Country, ' - ', TotalSuicides) END) AS Second, MAX(CASE WHEN RankNum = 3 THEN CONCAT(Country, ' - ', TotalSuicides) END) AS Third FROM SuicideStats WHERE RankNum <= 3 -- 仅保留前三名次的数据 GROUP BY Year ORDER BY Year; -- 按年份排序输出
补充说明
- 如果需要处理并列排名(如两个国家自杀数相同),可将
ROW_NUMBER()替换为RANK()或DENSE_RANK():RANK():并列名次会占用后续名次(如1,1,3)DENSE_RANK():并列名次不占用后续名次(如1,1,2)
- 请确保替换SQL中的
YourTableName和SuicideCount为实际的表名和自杀数字段名。
内容的提问来源于stack exchange,提问作者Divyajeet Singh
相关产品推荐
相关产品推荐

