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

如何在SQLite中复现MS Access的Transform功能?

在SQLite中实现MS Access TRANSFORM查询的等效功能

SQLite没有内置的TRANSFORM/透视函数,要实现你需要的行转列效果,条件聚合是最直接的替代方案,完全匹配你原Access查询的逻辑。

核心逻辑

原查询的本质是:

  • 按「月-日」格式的日期片段分组
  • 将每个年份作为单独的列,提取对应日期的TempMax值

等效SQL语句

SELECT
  strftime('%m-%d', DTE) AS DTE,
  MAX(CASE WHEN strftime('%Y', DTE) = '2022' THEN TempMax END) AS "2022",
  MAX(CASE WHEN strftime('%Y', DTE) = '2023' THEN TempMax END) AS "2023",
  MAX(CASE WHEN strftime('%Y', DTE) = '2024' THEN TempMax END) AS "2024"
FROM meteoInfo
GROUP BY strftime('%m-%d', DTE)
ORDER BY strftime('%m-%d', DTE);

关键细节说明

  • 日期格式化:用SQLite的strftime函数替代Access的Format,%m-%d直接生成「00-00」格式的月日字符串,%Y提取4位年份。
  • 条件聚合:通过CASE WHEN筛选对应年份的TempMax,用MAX聚合是因为每个「月-日+年份」组合只会有一条数据(每日一条记录),MAX能确保返回唯一值,同时自动忽略NULL(如果某年份没有对应日期的记录)。
  • 排序:最后按「月-日」排序,保证结果顺序和原查询一致。

动态年份的处理(如果年份不固定)

如果你的数据年份不固定,SQLite无法直接生成动态列,但可以分两步实现:

  • 先查询所有存在的年份:
    SELECT DISTINCT strftime('%Y', DTE) FROM meteoInfo ORDER BY 1;
    
  • 用上述结果手动拼接或通过程序生成包含所有年份的条件聚合SQL语句。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 14:18:19