проблема
Я работаю на SQL сервере 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)