2014-04-08 344 views
1

我在SQL服務器上工作,並與我如何獲得所需的輸出stucked。行作爲列保持該行的值

我有以下作爲源表。

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 

任何人都可以幫助我。

回答

4

可以使用旋轉功能來獲得結果,但因爲你需要爲每個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

+0

感謝您的幫助。它爲我工作。非常感謝你。 –