sql - 如何使用 SQL 实现以下结果集

标签 sql sql-server pivot

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/

相关文章:

mysql - 如何在 MySQL 的 GROUP BY 语句中选择 MAX(value)

javascript - Laravel 5 与 Ajax 连接吗?

mysql - 使用 MySQL 将单元格值转换为列

iphone - 将存储过程转换为 NSString 时出现问题

sql - 从 Oracle 游标的下一行获取数据

sql - SQL Server sysschedules 间隔是如何计算的?

sql - 将日期格式转换为 SELECT 中的双周存储桶

sql-server - 每年获取库存余额

sql - 哪里都不是空的

mysql - sql - 对于每个 Actor , Actor 的哪部电影被租用最多以及被租用了多少次