行作为保持该行值的列

时间:2014-04-08 11:39:05

标签: sql-server-2008 pivot

我在sql server上工作,并且如何获得所需的输出。

我将以下内容作为源表。

source image

我希望输出如下所示。

Desired Output

以下是包含源表的查询。

   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

请有人帮助我。

1 个答案:

答案 0 :(得分:4)

您可以使用PIVOT函数来获取结果,但由于您需要为每个Capacity返回多行,因此您需要使用像row_number()这样的窗口函数来生成一个唯一的序列。每个CapacityCDate组合:

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;

请参阅SQL Fiddle with Demo