首页 > 解决方案 > 在 1 行中创建相同列的数据透视

问题描述

我使用的是 SQL Server,我有一个返回所有字段数据的查询,主要是 1 个字段可以属于多个记录,记录 ID 区分它们。

我有一个这样的数据集。

这是我当前的数据集

我目前的查询:

Select fd.FieldName ,FV.FieldID, Data , R.RecordID    from FieldValues FV
Inner Join Records R on R.RecordID = FV.RecordID
Inner Join Forms F On f.FormID = R.FormID
Inner join Fields fd on fd.FieldID = fv.FieldID
Where R.RecordID IN (45,46)

我需要像这样创建属于同一 RecordID 的每一列的 1 行。

Service Name       Location          city         VendorCode       RecordID

Raj              ABC LOCATION      ABC CITY         32               45
BEN              ABC LOCATION      ABC CITY         --               46

以上是我想要的输出。

我已经尝试过枢轴但没有成功。

标签: sqlsql-serverdatabasepivot

解决方案


这是带有枢轴的解决方案,但缺少包含调整连接

declare @columns varchar(max) set @columns = '' 
select @columns =  coalesce(@columns + '[' + cast(col as varchar(MAX)) + '],', '') 
FROM ( select FieldName as col from FieldValues group by FieldName ) m

set @columns = left(@columns,LEN(@columns)-1) 
DECLARE @SQLString nvarchar(max);
set @SQLString = '

select * from 
 ( select RecordId, FieldName, Data from FieldValues) m
PIVOT 
(   MAX(Data) 
    FOR FieldName in (' + @columns + ')
) AS  PVT'

EXECUTE sp_executesql @SQLString

推荐阅读