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

如何在SQL中将一列拆分为两列并合并两行?(附示例)

解决SQL中列拆分合并行的问题

你这个需求属于典型的行转列场景,就是把同一分组下不同行的字段值,转成同一行的不同列。我给你两种实用的实现方法:

原表格数据

Sr.NoField1Field2Field3
1.ABCabc@abcHTML
2.ABCefg@efgXML

期望输出

Sr.NoField1HTMLXML
1.ABCabc@abcefg@efg

方法一:条件聚合(通用所有SQL数据库)

这种写法兼容性最好,不管你用MySQL、PostgreSQL、SQL Server还是Oracle都能跑:

SELECT 
    MIN(Sr.No) AS Sr.No,  -- 取同一分组里最小的序号,统一显示为1.
    Field1,
    -- 当Field3是HTML时,取对应的Field2值,否则返回NULL,用MAX提取有效数据
    MAX(CASE WHEN Field3 = 'HTML' THEN Field2 END) AS HTML,
    -- 同理处理XML列
    MAX(CASE WHEN Field3 = 'XML' THEN Field2 END) AS XML
FROM your_table_name  -- 把这里替换成你的实际表名
GROUP BY Field1;  -- 按Field1分组,把同一Field1的行合并

代码解释

  • GROUP BY Field1:将Field1值相同的行归为一组,这里就是把两行ABC的记录合并成一组
  • CASE WHEN:针对每组里的不同Field3值,提取对应的Field2内容,没有匹配的会返回NULL
  • MAX():因为每组里每个CASE只会有一个非NULL值,用MAX(或MIN)可以把这个有效值筛选出来,作为新列的内容
  • MIN(Sr.No):因为两行的序号不同,我们要统一显示为1.,取最小值就能得到目标结果

方法二:使用PIVOT函数(适用于SQL Server、Oracle等支持的数据库)

如果你的数据库支持PIVOT语法,可以用更简洁的写法:

SELECT 
    Sr.No,
    Field1,
    HTML,
    XML
FROM (
    -- 先把需要的数据查出来作为源表
    SELECT Sr.No, Field1, Field2, Field3
    FROM your_table_name
) AS source_data
PIVOT (
    -- 对Field2做聚合,这里用MAX因为每组只有一个值
    MAX(Field2)
    -- 指定要转成列的字段是Field3,列出需要的列值
    FOR Field3 IN (HTML, XML)
) AS pivot_table;

代码解释

  • 子查询source_data:先获取需要的基础字段,作为PIVOT的数据源
  • PIVOT子句:指定对Field2进行聚合(这里用MAX即可),然后把Field3的不同值(HTML、XML)转成对应的列名,自动填充对应的值

两种方法都能得到你想要的结果,优先推荐条件聚合,因为兼容性更强~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:37:23