首页 > 解决方案 > 在没有聚合的情况下在 SQL 中透视表

问题描述

我有一个格式如下的表:

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'.

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

标签: sqlsql-serverpivot

解决方案


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

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] 

推荐阅读