在没有聚合的情况下在 SQL 中透视表

Posted

技术标签:

【中文标题】在没有聚合的情况下在 SQL 中透视表【英文标题】:Pivot a table in SQL without an aggregate 【发布时间】:2021-01-29 11:26:02 【问题描述】:

我有一个格式如下的表格:

ID    CODE    NAME    VALUE
p1    p       deflect Yes
a1    d       source  Prim
p1    p       source  Dim

我希望获得以下内容:

ID    CODE    deflect    source
p1    p       Yes        DIM
a1    d       NULL       Prim

这是我当前的代码:

SELECT *
from
(
    select [ID], [CODE], [NAME], [VALUE]
    FROM [DATABASE].[dbo].[TABLE]
) SOURCE_TABLE
pivot
(
    max(VALUE)
    for [NAME] in ('deflect', 'source')
) PIVOT_TABLE;

但我得到了:

Incorrect syntax near 'deflect'.

您将如何为此编写枢轴代码?

【问题讨论】:

【参考方案1】:

为什么不使用条件聚合如下:

select [ID], [CODE], 
       max(case when [NAME] = 'deflect' then [VALUE] end) as deflect,
       max(case when [NAME] = 'source' then [VALUE] end) as source_
FROM [DATABASE].[dbo].[TABLE]
group by [ID], [CODE] 

【讨论】:

谢谢,有没有办法告诉它对列的所有值进行透视,而不必指定每个值? 在这种情况下您必须使用动态查询。这不会那么容易。您应该在应用程序端而不是在数据库中应用这些逻辑

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

如何在不使用数据透视和反透视的情况下在 SQL Server 中水平显示数据?

Sql Server 聚合或数据透视表查询

具有多列聚合的 SQL Server 数据透视表

在没有聚合的熊猫数据透视表中重复条目并重命名列行

没有聚合函数的 SQL Server 数据透视查询

如屏幕截图中所述,我想在 SQL 中创建一个数据透视表 [重复]