在没有聚合的情况下在 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 中透视表的主要内容,如果未能解决你的问题,请参考以下文章