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

SQL技术实现:基于Field_ID将Date列拆分为起止日期列

解决方案:将日期列按Field_ID拆分为起始/结束日期列

这是个很常见的行转列需求,我给你两种实用的SQL实现方法,覆盖不同数据库的兼容性需求:

方法一:条件聚合(全数据库通用)

这种写法兼容性拉满,不管你用MySQL、PostgreSQL还是SQL Server都能跑通:

SELECT
    Extender_Record_ID,
    MAX(CASE WHEN Field_ID = 100 THEN Date END) AS Start_Date,
    MAX(CASE WHEN Field_ID = 101 THEN Date END) AS End_Date
FROM
    Your_Table_Name -- 记得替换成你的实际表名
GROUP BY
    Extender_Record_ID
ORDER BY
    Extender_Record_ID;

简单解释:

  • 以Extender_Record_ID分组,确保每组对应一对起始/结束日期
  • CASE WHEN会精准筛选出对应Field_ID的日期值,用MAX()(或MIN()都行,因为每组里每个Field_ID只有一条记录)把值聚合起来
  • 最后排序保证结果顺序和你期望的一致

方法二:PIVOT函数(适用于支持该语法的数据库)

如果你的数据库是SQL Server、Oracle这类支持PIVOT的,可以用更简洁的写法:

SELECT
    Extender_Record_ID,
    [100] AS Start_Date,
    [101] AS End_Date
FROM
    Your_Table_Name
PIVOT
(
    MAX(Date)
    FOR Field_ID IN ([100], [101])
) AS Pivot_Result
ORDER BY
    Extender_Record_ID;

简单解释:

  • PIVOT会直接把Field_ID的不同值(100和101)转成列
  • 同样用MAX(Date)聚合每组的日期,最后给列重命名成你需要的Start_Date和End_Date

最终结果示例

执行任意一种SQL后,你会得到这样的结果:

Extender_Record_IDStart_DateEnd_Date
11/1/20181/2/2018
21/14/20181/15/2018
32/1/20182/3/2018
42/15/20182/17/2018
53/2/20183/5/2018

要是你只需要单独提取Start Date或End Date的列表,只在SELECT里保留对应列就行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:20:54