You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 07:15:44