枢轴字符串SQL

时间:2018-08-09 11:00:02

标签: sql sql-server tsql

我正在尝试旋转该表,其名称为#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

2 个答案:

答案 0 :(得分:1)

@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;

答案 1 :(得分:0)

必须使用聚合以及min()max()怎么样?

select idjob, date, min(name), max(name)
from #salida
group by idjob, date;

SQL表表示无序集,因此没有对值的排序(除非另一列指定了排序)。因此,这可能是在同一行中获取两个不同值的最简单方法。