将每个列的值转换为列名

问题描述 投票:0回答:1

我认为我的问题很简单,答案也必须很简单。我只想在我的三栏文章之一中介绍一些关键点。我有这样的查询:

SELECT AgentId, ReferenceTitle, PaymentValue FROM AgentPayments WHERE PaymentValue > 0

结果将是这样的:

AgentId       ReferenceTitle      PaymentValue     
---------------------------------------------------
AgentId1      ReferenceTitle1     PayementValue1  
AgentId1      ReferenceTitle2     PayementValue2   
AgentId1      ReferenceTitle3     PayementValue3
AgentId2      ReferenceTitle2     PayementValue4
AgentId3      ReferenceTitle2     PayementValue5
AgentId3      ReferenceTitle3     PayementValue6    

如您所见,它为我返回了一些记录,现在我想以一种方式将结果转换为“ ReferenceTitle”列的每个值都变成自己的列,如下所示:

AgentId     ReferenceTitle1      ReferenceTitle2     ReferenceTitle3            
--------------------------------------------------------------------
AgentId1     PayementValue1      PayementValue2       PayementValue3
AgentId2         NULL            PayementValue4            NULL
AgentId3         NULL            PayementValue5       PayementValue6

我刚刚通过搜索发现了非常复杂的结果,但是我认为必须有一个简单的解决方案。你觉得像我吗?

UPDATE

我不知道'ReferenceTitle'列的值,所以我不能在查询中使用这些值。

sql converters
1个回答
0
投票

您可以使用条件聚合:

SELECT AgentId,
 MAX(CASE WHEN ReferenceTitle='ReferenceTitle1' THEN PaymentValue END) AS ReferenceTitle1,
 MAX(CASE WHEN ReferenceTitle='ReferenceTitle2' THEN PaymentValue END) AS ReferenceTitle2,
 MAX(CASE WHEN ReferenceTitle='ReferenceTitle3' THEN PaymentValue END) AS ReferenceTitle3
FROM tab
GROUP BY AgentId;
© www.soinside.com 2019 - 2024. All rights reserved.