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

Oracle转SQL Server:多列UNPIVOT语句改写求助

在SQL Server中实现Oracle多列UNPIVOT的等价方案

Oracle支持一次性对多列组执行UNPIVOT,但SQL Server原生不支持这种语法,你可以通过以下两种方式实现等价功能:

方法1:使用CROSS APPLY + VALUES(推荐,性能更优)

这种方式只扫描一次原表,性能比UNION ALL更好:

SELECT 
    unpvt.col,
    unpvt.value,
    unpvt.prev_value
FROM 
    your_table  -- 替换成你的实际表名
CROSS APPLY (
    VALUES
        ('title', title, prev_title),
        ('stage', stage, prev_stage),
        ('value', value, prev_value)
) AS unpvt(col, value, prev_value);

方法2:使用UNION ALL拼接结果

如果你的SQL Server版本较低(不支持CROSS APPLY),可以用UNION ALL逐个列组转换:

SELECT 'title' AS col, title AS value, prev_title AS prev_value
FROM your_table
UNION ALL
SELECT 'stage' AS col, stage AS value, prev_stage AS prev_value
FROM your_table
UNION ALL
SELECT 'value' AS col, value AS value, prev_value AS prev_value
FROM your_table;

两种方法都能得到和Oracle UNPIVOT语句完全一致的结果:将原表中(title, prev_title)、(stage, prev_stage)、(value, prev_value)这三组列,分别转换为col字段对应值,同时保留每组的两个值到value和prev_value列中。

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

相关产品推荐
方舟 Agent Plan

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

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