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

如何在SQL Server中将行数据转换为列格式?

在SQL Server中将行数据转置为指定列格式的查询方法

原表结构及数据

BatchAddIDBatchIDDescriptionActual
11Chemical 110
21Chemical 211
32Chemical 120
42Chemical 221

期望结果

BatchIDChemical 1 ActualChemical 2 Actual
11011
22021

下面提供两种可行的查询方法,都能得到你想要的结果:


方法1:CASE表达式+聚合函数

这种方法逻辑直观,适合已知要转置的具体类别(比如这里明确是Chemical 1和Chemical 2)的场景,兼容性也更好:

SELECT
    BatchID,
    MAX(CASE WHEN Description = 'Chemical 1' THEN Actual END) AS [Chemical 1 Actual],
    MAX(CASE WHEN Description = 'Chemical 2' THEN Actual END) AS [Chemical 2 Actual]
FROM
    YourTableName -- 替换成你的实际表名
GROUP BY
    BatchID;

原理:用CASE语句筛选出对应化学品的实际值,再通过聚合函数(MAX/MIN/SUM都可以,这里因为每个BatchID+Description组合唯一,所以任意聚合函数都能得到正确值)将同一BatchID的多行数据合并为一行。


方法2:使用PIVOT运算符

SQL Server提供的PIVOT是专门用于行转列的语法,写法更简洁:

SELECT
    BatchID,
    [Chemical 1] AS [Chemical 1 Actual],
    [Chemical 2] AS [Chemical 2 Actual]
FROM
    YourTableName -- 替换成你的实际表名
PIVOT
(
    MAX(Actual)
    FOR Description IN ([Chemical 1], [Chemical 2])
) AS PivotTable;

原理:PIVOT子句中指定要聚合的字段(Actual),通过FOR Description IN (...)指定要转成列的具体类别,最后给转置后的结果表起别名即可。

如果后续化学品的种类可能动态增加,需要自动生成列的话,可以使用动态SQL实现,但如果是固定的几个类别,上面两种方法完全够用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 13:57:36