2012-03-05 31 views
4

我有这个疑问SQL服务器数据透视中的空值?

DECLARE @Test TABLE 
(
    RowID INT IDENTITY(1,1) PRIMARY KEY 
    ,[Name]VARCHAR(10) NOT NULL 
    ,tool VARCHAR(10) NOT NULL, 
    stam NVARCHAR(MAX) 

); 
INSERT @Test VALUES ('john', 'vocals','1'); 
INSERT @Test VALUES ('john', 'guitar','1'); 
INSERT @Test VALUES ('paul', 'vocals','1'); 
INSERT @Test VALUES ('paul', 'bass','1'); 
INSERT @Test VALUES ('george', 'vocals','1'); 
INSERT @Test VALUES ('george', 1,'1'); 
INSERT @Test VALUES ('ringo', 'vocals','1'); 
INSERT @Test VALUES ('ringo', 3,'1'); 
INSERT @Test VALUES ('ringo', 'drums','1'); 
INSERT @Test VALUES ('yoko', 'vocals','1'); 
INSERT @Test VALUES ('royi', 'vocals','1'); 
INSERT @Test VALUES ('royi', 'guitar','1'); 


;WITH PivotSource 
AS 
(
    SELECT t.[Name], t.[tool] 
    FROM @Test t 
) 

SELECT * 
FROM PivotSource 
PIVOT (max(tool) FOR tool IN ([vocals], [guitar], [bass],[drums])) pvt; 

结果是:

enter image description here

有没有什么办法来取代null""(空字符串)? (没有修改CTE数据!)

+0

[?在SQL服务器枢空]的可能重复(http://stackoverflow.com/questions/9567785/null-in-sql-server-pivot) – Oded 2012-03-05 13:57:30

+0

@Oded double submit ...错误。谢谢 – 2012-03-05 13:58:39

+0

分享你的输出,以便更好地理解这个.. – 2012-03-05 14:03:54

回答

7

用途:

SELECT pvt.Name 
    , isnull(pvt.[vocals], '') [vocals] 
    , isnull(pvt.[guitar], '') [guitar] 
    , isnull(pvt.[bass], '') [bass] 
    , isnull(pvt.[drums], '') [drums] 
FROM PivotSource 
PIVOT 
(
    max(tool) 
    FOR tool 
    IN ([vocals], [guitar], [bass], [drums]) 
) pvt; 

输出:

Name  vocals  guitar  bass  drums 
---------- ---------- ---------- ---------- ---------- 
george  vocals       
john  vocals  guitar     
paul  vocals    bass  
ringo  vocals       drums 
royi  vocals  guitar     
yoko  vocals