我在sql server上工作,并且如何获得所需的输出。
我将以下内容作为源表。
我希望输出如下所示。
以下是包含源表的查询。
DECLARE @Temp TABLE(Capacity INT,CDate DATE,Name NVARCHAR(100))
INSERT INTO @Temp VALUES (1,'4/14/2014','M24')
INSERT INTO @Temp VALUES (1,'4/15/2014','M22')
INSERT INTO @Temp VALUES (1,'4/14/2014','M24')
INSERT INTO @Temp VALUES (1,'4/15/2014',NULL)
INSERT INTO @Temp VALUES (2,'4/14/2014','F67')
INSERT INTO @Temp VALUES (2,'4/15/2014','F31')
INSERT INTO @Temp VALUES (3,'4/14/2014','M53')
SELECT * FROM @Temp
请有人帮助我。
答案 0 :(得分:4)
您可以使用PIVOT函数来获取结果,但由于您需要为每个Capacity
返回多行,因此您需要使用像row_number()
这样的窗口函数来生成一个唯一的序列。每个Capacity
和CDate
组合:
SELECT Capacity, [2014-04-14], [2014-04-15]
FROM
(
SELECT Capacity,
CDate,
Name,
row_number() over(partition by capacity, cdate
order by capacity) seq
FROM @Temp
) d
PIVOT
(
MAX(name)
FOR CDate IN ([2014-04-14], [2014-04-15])
) piv
ORDER BY Capacity;