【发布时间】:2020-02-09 23:57:48
【问题描述】:
问题
我在 SQL Server 2012 上工作,遇到问题我无法添加行包含列
名称作为第一行意味着我需要将数据中的列名称显示为行
如您所见,我在行数据中添加了列名
那么该怎么做呢?
这是当前结果
ItemId IPN PartnerName CustomerName Fan Motor Refrigator temprature
1 1233 Saico NULL NULL NULL NULL 55567
2 5433 Mbaby NULL 23444 NULL NULL NULL
3 590444 nagieb NULL NULL NULL 556666 NULL
要求或期望的结果
ItemId IPN PartnerName CustomerName Fan Motor Refrigator temprature
ItemId IPN PartnerName CustomerName Fan Motor Refrigator temprature
1 1233 Saico NULL NULL NULL NULL 55567
2 5433 Mbaby NULL 23444 NULL NULL NULL
3 590444 nagieb NULL NULL NULL 556666 NULL
下面的代码实现了我目前的结果
create table #temp
(
CustomerName nvarchar(200),
CustomerId nvarchar(50)
)
insert into #temp
(
CustomerId,
CustomerName
)
values
('1','Avidyne')
create table #FeatureTypes
(
FeatureId int,
FeatureName nvarchar(200)
)
insert into #FeatureTypes
(
FeatureId,
FeatureName
)
values
(1,'Fan'),
(2,'Refregator'),
(3,'Cars')
create table #Customer
(
CustomerId int,
CustomerName nvarchar(200)
)
insert into #Customer values
('1','Avidyne')
create table #Items
(
ItemId int,
CustomerId int,
IPN nvarchar(50),
PartnerName nvarchar(50)
)
insert into #Items (ItemId,CustomerId,IPN,PartnerName)
values
(1, 1,'1055','Magic'),
(2, 1,'4077','DataValidation'),
(3, 1,'3034','Moran')
create table #ItemFeatures
(
ItemId int,
FeatureId int,
FeatureValue nvarchar(50)
)
insert into #ItemFeatures (ItemId,FeatureId,FeatureValue)
values
(1, 1,'10'),
(2, 2,'40'),
(2, 1,'30'),
(1, 2,'20'),
(3, 1,'90'),
(1, 3,'180')
DECLARE @Columns as VARCHAR(MAX),@Header as VARCHAR(MAX)
SELECT @Columns =
COALESCE(@Columns + ', ','') + QUOTENAME(FeatureName)
FROM
(select distinct FeatureName from #FeatureTypes
) AS B
ORDER BY B.FeatureName
DECLARE @SQLs as VARCHAR(MAX)
SET @SQLs = 'SELECT cast(ItemId as nvarchar(50)),IPN,PartnerName,CustomerName,' + @Columns + '
FROM
(
select F.ItemId ,t.FeatureName,F.FeatureValue,I.IPN,I.PartnerName,FI.CustomerName
from #ItemFeatures F
Inner Join #Items I ON F.ItemId=I.ItemId
inner join #FeatureTypes T on T.FeatureId=F.FeatureId
inner join #temp FI on I.CustomerID=FI.CustomerID
) as PivotData
PIVOT
(
max(FeatureValue)
FOR FeatureName IN (' + @Columns + ')
) AS PivotResult
'
EXEC(@SQLs)
【问题讨论】:
-
您现在面临的问题是什么?当前输出和所需输出是多少?
-
不太明白你想要什么,但可能你可以使用
UNION ALL添加你想要的 -
我更新了你现在可以看到的问题
标签: sql stored-procedures pivot-table temp-tables