在没有聚合的 SQL 中将行透视到列

Posted

技术标签:

【中文标题】在没有聚合的 SQL 中将行透视到列【英文标题】:Pivot Rows to Column in SQL without Aggregation 【发布时间】:2021-07-26 17:55:44 【问题描述】:

我希望将多行转换为列。但是当我在 Pivot 中使用 Max 或 Min 时,它只返回一行。我想显示所有行。有人可以帮忙吗?

来自:

到:

【问题讨论】:

【参考方案1】:

您可以使用条件聚合:

select object_key,
       max(case when name = 'OBJECT_NAME' then value end) as object_name,
       max(case when name = 'Start Time' then value end) as start_time,
       max(case when name = 'End Time' then value end) as end_time,
       max(case when name = 'row_count' then value end) as row_count,
       max(case when name = 'Execution Time' then value end) as execution_time
from t
group by object_key;

我不确定您为什么在问题中指定“无聚合”。

如果你真的不喜欢聚合使用可以使用joins:

select ton.object_key, ton.value as object_name,
       ts.value as start_time, te3.value as end_time,
       . . 
from t ton on
     t ts
     on ton.object_key = ts.object_key join
     t te
     on ton.object_key = t3.ojbect_key. join
     . . . ;

【讨论】:

非常感谢戈登!我只是在努力思考枢轴,但没有看到可用选项的情况:) 这正如我预期的那样工作。再次感谢

以上是关于在没有聚合的 SQL 中将行透视到列的主要内容,如果未能解决你的问题,请参考以下文章

动态透视行到列-SQL 服务器

如何在 SQL Server 2008 中将行切换到列,反之亦然

将行透视到列级别

Excel从列到列的映射

TSQL - 将 Sales_Rep 行分组到列并将 DESCRIP 列显示为行 无聚合

在oracle中将行值添加到列