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

SQL如何将ID与年份表行转列,按年份匹配情况填充1或0

行转列需求解决方案

你要实现的是固定列的行转宽表需求,使用条件聚合即可实现,该方案兼容所有主流SQL数据库:

SELECT
    id,
    MAX(CASE WHEN year = 2002 THEN 1 ELSE 0 END) AS `2002`,
    MAX(CASE WHEN year = 2006 THEN 1 ELSE 0 END) AS `2006`,
    MAX(CASE WHEN year = 2010 THEN 1 ELSE 0 END) AS `2010`,
    MAX(CASE WHEN year = 2014 THEN 1 ELSE 0 END) AS `2014`,
    MAX(CASE WHEN year = 2018 THEN 1 ELSE 0 END) AS `2018`
FROM year_sheet
GROUP BY id
ORDER BY id;

逻辑说明

  • 内层CASE判断每行的年份是否匹配对应列,匹配返回1,否则返回0
  • 外层用MAX做分组聚合:同一个id下只要有任意一条记录匹配该年份,聚合结果就是1,否则返回0,完全符合你的取值要求

如果你使用的数据库支持PIVOT语法(如Oracle、SQL Server、Spark SQL等),可以用更简洁的写法:

SELECT *
FROM year_sheet
PIVOT (
    COUNT(year)
    FOR year IN (2002, 2006, 2010, 2014, 2018)
) AS pivot_result
ORDER BY id;

两种方案输出的结果完全一致,对应你的示例数据输出如下:

id20022006201020142018
10111111
10211110
10300100

内容的提问来源于stack exchange,提问作者ConcreteJungle

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 06:06:03