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

如何在SQL查询中将行转列?附视图数据示例

解决SQL视图的行列转置需求

针对你描述的场景,这是一个典型的**行列转置(Pivot)**需求——需要将同一Ordinamento分组下的多行数据,转换成以分组为单位的单行多列数据。下面提供两种通用的实现方案,适配大多数主流SQL数据库:

方案一:使用CASE表达式+聚合函数(兼容性最强)

这种写法不依赖数据库特定的PIVOT语法,几乎所有SQL数据库都支持:

SELECT
    -- 生成你期望的连续ID:从72开始递增
    71 + ROW_NUMBER() OVER (ORDER BY Ordinamento) AS ID,
    IdEsame,
    -- 提取Colonna=1对应的参数值
    MAX(CASE WHEN Colonna = 1 THEN IdParametro END) AS IdParametro,
    -- 提取Colonna=2对应的参数值
    MAX(CASE WHEN Colonna = 2 THEN IdParametro END) AS IdParametro2,
    -- 提取Colonna=3对应的参数值
    MAX(CASE WHEN Colonna = 3 THEN IdParametro END) AS IdParametro3
FROM
    YourViewName -- 替换成你的视图名称
WHERE
    IdEsame = 39
GROUP BY
    IdEsame, Ordinamento
ORDER BY
    Ordinamento;

说明:

  1. 我们通过GROUP BY IdEsame, Ordinamento将同一排序组的行聚合在一起;
  2. CASE表达式负责定位每个Colonna对应的IdParametro值,配合MAX(或MIN,因为每组每个Colonna只有一个值)提取出唯一值;
  3. ROW_NUMBER() OVER (ORDER BY Ordinamento)用于生成连续的序号,加上71后正好得到你期望的72、73、74的ID序列。如果需要保留原分组中Colonna=1的原始ID,只需把ID行替换为:
    MIN(CASE WHEN Colonna = 1 THEN ID END) AS ID
    

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

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

WITH PivotData AS (
    SELECT
        IdEsame,
        Ordinamento,
        ID,
        IdParametro,
        -- 动态生成目标列名:IdParametro1/2/3
        'IdParametro' + CAST(Colonna AS VARCHAR(10)) AS ParametroColumn
    FROM
        YourViewName
    WHERE
        IdEsame = 39
)
SELECT
    71 + ROW_NUMBER() OVER (ORDER BY Ordinamento) AS ID,
    IdEsame,
    IdParametro1,
    IdParametro2,
    IdParametro3
FROM
    PivotData
PIVOT (
    MAX(IdParametro)
    FOR ParametroColumn IN (IdParametro1, IdParametro2, IdParametro3)
) AS PivotedResult
ORDER BY
    Ordinamento;

说明:

  1. 先通过CTE(公共表表达式)将Colonna的值转换成目标列名的后缀;
  2. 利用PIVOT关键字直接将行数据转成列,最后生成你需要的结果集。

执行上述任意方案,都能得到你期望的结果:

IDIdEsameIdParametroIdParametro2IdParametro3
7239163164165
7339166167168
7439169170171

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:45:32