繁体   English   中英

将每个列值转换为列名

[英]Convert Each Column Value To Become A Column Name

我想我的问题很简单,答案也一定很简单。 我只想在我的三列之一上使用 pivot 之类的东西。 我有一个这样的查询:

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

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

更新

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

您可以使用条件聚合:

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;

最后,正如@lukasz所说,我使用动态 pivot 得出了答案,至少它不像我预期的那样复杂:

DECLARE @cols AS NVARCHAR(MAX),
@query  AS NVARCHAR(MAX)

SELECT @cols = STUFF((SELECT  ',' + QUOTENAME(ReferenceTitle) 
                FROM AgentPayments 
                WHERE PaymentValue > 0 
                GROUP BY ReferenceTitle
                FOR XML PATH(''), TYPE
                ).value('.', 'NVARCHAR(MAX)')
                ,1,1,'')

SELECT @query = '
SELECT * FROM
(
SELECT   
AgentId, ReferenceTitle, PaymentValue
FROM AgentPayments 
) X
PIVOT 
(
MAX(PaymentValue)
for ReferenceTitle in ('+@cols+')
) P'
EXEC SP_EXECUTESQL @query

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM