我正在尝试旋转该表,其名称为#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
答案 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表表示无序集,因此没有对值的排序(除非另一列指定了排序)。因此,这可能是在同一行中获取两个不同值的最简单方法。