【问题标题】:Pivot a table in SQL without an aggregate在没有聚合的情况下在 SQL 中透视表
【发布时间】: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'.

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

【问题讨论】:

    标签: sql sql-server pivot


    【解决方案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] 
    

    【讨论】:

    • 谢谢,有没有办法告诉它对列的所有值进行透视,而不必指定每个值?
    • 在这种情况下您必须使用动态查询。这不会那么容易。您应该在应用程序端而不是在数据库中应用这些逻辑
    猜你喜欢
    • 2022-12-03
    • 2021-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-01
    • 2015-12-22
    • 1970-01-01
    相关资源
    最近更新 更多