首页 > 解决方案 > 透视字符串 SQL

问题描述

我正在尝试透视这个名为#salida 的表

IDJOB NAME    DATE
1     Michael NULL
1     Aaron   NULl

我想要得到的结果是

IDJOB DATE NAME1    NAME2
1     NULL  Michael Aaron

我的代码是这个

SELECT *
FROM #salida
PIVOT
(
    MAX([Name]) FOR [Name] IN ([Name1],[Name2])
) PVT GROUP BY IdJob,Date,Name1,Name2 ;

SELECT * FROM #salida

得到的结果是

IDJOB DATE NAME1    NAME2
1     NULL  NULL    NULL

标签: sqlsql-servertsql

解决方案


@XabiIparra,看一个模型。您需要按 IdJob 进行分区,然后添加所需的列。

DECLARE @salida TABLE(idjob VARCHAR(100),[Name] VARCHAR(100),[DATE] DATE);
INSERT INTO @salida VALUES
 (1,'Michael', NULL)
,(1,'Aaron', NULL)
,(2,'Banabas', NULL)


SELECT p.*
FROM 
(
    SELECT * 
          ,'NAME'+CAST(ROW_NUMBER() OVER(PARTITION BY [idjob] ORDER BY NAME) AS varchar(100)) ColumnName
    FROM @salida
)t
PIVOT
(
    MAX([Name]) FOR ColumnName IN (NAME1,NAME2,NAME3,NAME4,NAME5 /*add as many as you need*/)
)p;

推荐阅读