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

SQL中无需UNION ALL将多列转换为单列的实现方法

不用UNION ALL实现多列转单列的SQL方案

你需要把横向的三列数据转成纵向单列,同时避免重复编写复杂查询逻辑,以下是不同数据库环境下的可行方案:

1. SQL Server/Oracle:用UNPIVOT原生操作符

UNPIVOT是专门做列转行的语法,能直接复用你的查询逻辑,不用重复写三次:

SELECT [1]
FROM TableZ
UNPIVOT (
    [1] FOR Columns IN ([Field A], [Field B], [Field C])
) AS UnpivotResult;

2. PostgreSQL:用UNNEST+ARRAY组合

利用数组构造和拆分数组的函数实现转换:

SELECT unnest(ARRAY["Field A", "Field B", "Field C"]) AS "1"
FROM TableZ;

3. MySQL 8.0+:用JSON_TABLE+JSON_ARRAY

借助JSON函数构造数组并展开成单行:

SELECT j.col AS `1`
FROM TableZ,
     JSON_TABLE(
         JSON_ARRAY(`Field A`, `Field B`, `Field C`),
         '$[*]' COLUMNS (col VARCHAR(255) PATH '$')
     ) j;

4. 通用兼容方案:用CTE封装核心逻辑

如果你的数据库不支持上面的原生函数,可以把复杂查询封装成CTE(公共表表达式),只写一次核心逻辑,后面只引用CTE就行:

WITH ComplexQuery AS (
    -- 这里只写一次你的复杂查询,包括过滤、关联等所有逻辑
    SELECT `Field A`, `Field B`, `Field C`
    FROM TableZ
    -- 比如 WHERE xxx JOIN xxx 这类复杂条件都放这
)
SELECT `Field A` AS `1` FROM ComplexQuery
UNION ALL
SELECT `Field B` AS `1` FROM ComplexQuery
UNION ALL
SELECT `Field C` AS `1` FROM ComplexQuery;

这个方案虽然还是用到了UNION ALL,但核心的复杂查询只需要编写一次,避免了重复代码的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 10:53:29