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

PostgreSQL中使用全外连接实现学校数据日期列按级别拆分

解决PostgreSQL行转列(透视表)需求

这是典型的行转列场景,用条件聚合就能轻松搞定,比你尝试的UNION或循环方案更简洁高效,也更易维护。

解决方案SQL代码

SELECT
    sch_code,
    COALESCE(MAX(CASE WHEN sch_level = 'P' THEN start_date END), '00-00-0000') AS start_P,
    COALESCE(MAX(CASE WHEN sch_level = 'P' THEN end_date END), '00-00-0000') AS end_P,
    COALESCE(MAX(CASE WHEN sch_level = 'S' THEN start_date END), '00-00-0000') AS start_S,
    COALESCE(MAX(CASE WHEN sch_level = 'S' THEN end_date END), '00-00-0000') AS end_S
FROM
    your_table_name  -- 替换为你的实际表名
WHERE
    flag = 'V'  -- 根据你的数据需求,可保留或移除该过滤条件
GROUP BY
    sch_code
ORDER BY
    sch_code;

代码逻辑说明

  1. 分组聚合:通过GROUP BY sch_code将同一代码的所有行合并到一条结果中
  2. 条件取值:用CASE WHEN匹配sch_level,提取对应级别的日期;MAX函数确保每个分组内仅保留该级别唯一的日期(即使有重复行也能正确处理)
  3. 默认值填充:COALESCE函数会把没有对应级别数据时产生的NULL,替换成你需要的00-00-0000

执行这段SQL后,结果会完全匹配你预期的输出格式:既有同时包含P/S级别的完整数据,也会为缺失级别填充指定默认值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:55:30