EID PID Metric Limit1 Limit2 Limit3
1 8 20 < 210 <
1 8 22 > 89 >=
我有以下要求
来源
要转变为
EID PID 20-Limit1 20-Limit2 20-Limit3 22-Limit1 22-Limit2 22-Limit3
1 8 < 210 < > 89 >=
你能帮忙吗?
最佳答案
请尝试使用此代码
Create table #TempTable (EID INT,PID INT,Col1 VARCHAR(100),Col2 VARCHAR(100))
;WITH TestingCTE AS(
Select EID,PID,
Cast(Metric as varchar(50))+'-'+ColumnName AS Col1,
Columnvalue AS Col2,
Cast(Metric as varchar(50)) +'-'+ ColumnName1 AS Col3,
Columnvalue1 AS col4,
Cast(Metric as varchar(50)) +'-'+ ColumnName2 AS col5,
Columnvalue2 AS col6
from
(
select EID,PID,Metric,Limit1,Limit2,Limit3 from Testing
) src
unpivot
(
Columnvalue for ColumnName in (Limit1)
) un
unpivot
(
Columnvalue1 for ColumnName1 in (Limit2)
) un
unpivot
(
Columnvalue2 for ColumnName2 in (Limit3)
) un
)
INsert into #TempTable (EID,PID,Col1,Col2)
Select EID,PID,Col1,Col2 from TestingCTE
UNION ALL
Select EID,PID,Col3,Cast(Col4 as Varchar(100)) from TestingCTE
UNION ALL
Select EID,PID,Col5,Col6 from TestingCTE
Declare @var NVARCHAR(MAX)
Declare @query NVARCHAR(MAX)
Select @var= Stuff((SELECT ', ' + QUOTENAME(col1) from #TempTable
For XML PATH ('')),1,1,'')
SET @query='Select * from (Select * from #TempTable) a
PIVOT(MAX(col2) for col1 IN('+@var+'))Pivoted'
EXEC sp_executesql @query
Drop table #TempTable
关于sql - 如何使用 SQL 实现以下结果集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25663911/