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

如何将两张表的数据转换为扁平化视图并正确展示字段值

产品状态日期的扁平化查询实现

针对你提供的表结构,要将表B中的状态日期转换为独立列,生成扁平化视图,可以用以下两种常见方法实现:

通用CASE WHEN方法(支持多数关系型数据库)

这种方法兼容性强,适用于MySQL、PostgreSQL、SQL Server等几乎所有数据库:

SELECT
    a.ProdCode,
    MAX(CASE WHEN b.Status = 'Start' THEN b.Date END) AS `Start Date`,
    MAX(CASE WHEN b.Status = 'Done' THEN b.Date END) AS `Done Date`
FROM
    表A a
INNER JOIN
    表B b ON a.ProdCode = b.ProdCode
GROUP BY
    a.ProdCode;

说明:

  • 使用INNER JOIN确保只返回表B中存在记录的产品(和你给出的期望视图完全匹配),如果需要包含表A中所有产品(即使表B无对应记录),将INNER JOIN改为LEFT JOIN即可
  • CASE WHEN根据状态匹配对应的日期,非目标状态的行返回NULL
  • MAX()聚合函数用于排除NULL值,保证每个产品仅返回一行;如果同一产品同一状态有多条记录,MAX会取最晚的日期,根据需求也可替换为MIN取最早日期

专用PIVOT方法(以SQL Server为例)

部分数据库支持PIVOT语法,写法更简洁:

SELECT
    a.ProdCode,
    [Start] AS `Start Date`,
    [Done] AS `Done Date`
FROM
    表B
PIVOT
(
    MAX(Date)
    FOR Status IN ([Start], [Done])
) AS PivotTable
INNER JOIN 表A a ON PivotTable.ProdCode = a.ProdCode;

说明:

  • PIVOT语法直接将Status列的取值转为新列,聚合函数MAX(Date)用于获取对应状态的日期
  • 不同数据库的PIVOT语法有差异,比如MySQL无原生PIVOT,Oracle需要调整语法细节

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 02:55:20