如何使用SQL将行转换为列?例如。数据透视表

时间:2015-12-19 20:02:22

标签: sql tsql sql-server-2012

我正在努力处理将行转换为列的查询。挑战在于每次运行选择时“代码”的数量可能会有所不同。

所以select的结果如下:

 ********   COPA:LN, LBUL:LN, LSIL:LN 
 COPA:LN      1    ,   0.9  ,   0.9   
 LBUL:LN      0.9  ,   1    ,   0.9   
 LSIL:LN      0.9  ,   0.9  ,   1

非常感谢!!!

CREATE TABLE #myTable
([code1] varchar(15), [code2] varchar(15),  [cor] decimal(18,14));

INSERT INTO #myTable
 ([code1] , [code2],  [cor] )
 VALUES
('COPA:LN'     ,    'COPA:LN'     ,     1),
('LBUL:LN'     ,    'COPA:LN'     ,     0.9),
('LSIL:LN'     ,    'COPA:LN'     ,     0.918356332594718),
('COPA:LN'     ,    'LBUL:LN'     ,     0.93607492424868),
('LBUL:LN'     ,    'LBUL:LN'     ,     1),
('LSIL:LN'     ,    'LBUL:LN'     ,     0.960430401044714),
('COPA:LN'     ,    'LSIL:LN'     ,     0.918356332594718),
('LBUL:LN'     ,    'LSIL:LN'     ,     0.960430401044714),
('LSIL:LN'     ,    'LSIL:LN'     ,     1)

2 个答案:

答案 0 :(得分:0)

您可以在MSSQL 2012中创建数据透视表。

https://technet.microsoft.com/en-us/library/ms177410(v=sql.105).aspx

-- Pivot table with one row and five columns
SELECT 'AverageCost' AS Cost_Sorted_By_Production_Days, 
[0], [1], [2], [3], [4]
FROM
(SELECT DaysToManufacture, StandardCost 
    FROM Production.Product) AS SourceTable
PIVOT
(
AVG(StandardCost)
FOR DaysToManufacture IN ([0], [1], [2], [3], [4])
) AS PivotTable;

答案 1 :(得分:0)

尝试动态支点

DECLARE @cols AS NVARCHAR(MAX),
    @query  AS NVARCHAR(MAX)

select @cols = STUFF((SELECT ',' + QUOTENAME(code1) 
                    from #myTable
                    group by code1
                    order by code1
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')
set @query = N'SELECT * from #t

            pivot 
            (
                max(cor)
                for code1 in (' + @cols + N')
            ) p '

exec sp_executesql @query;