2010-03-19 57 views
0

右边的一个简单的问题,我可以输入到透视表的nText? (SQL Server 2005中)Sql Server 2005数据透视表是否将nText传递给它?

我所拥有的是它记录了答案例如由以下元素的问卷调查表:在n文本举行

UserID QuestionNumber Answer 
Mic  1    Yes 
Mic  2    No 
Mic  3    Yes 
Ste  1    Yes 
Ste  2    No 
Ste  3    Yes 
Bob  1    Yes 
Bob  2    No 
Bob  3    Yes 

有了答案。反正什么ID就像一个透视表做的是:

UserID 1  2 3 
Mic  Yes No Yes 
Ste  Yes No Yes 
Bob  Yes No Yes 

我有一些测试代码,创建一个数据透视表,但目前它只是显示在每列答案的数目(代码可以在下面找到) 。所以我只想知道是否可以将nText添加到数据透视表中?正如当我尝试过它会带来错误,并在另一个网站上指出,这是不可能的,所以我想检查是否是这种情况。

仅供进一步参考,我没有机会更改数据库,因为它与其他尚未创建或有权访问的系统链接。

继承人的SQL代码,我在下面的存在:

DECLARE @query NVARCHAR(4000) 
DECLARE @count INT 
DECLARE @concatcolumns NVARCHAR(4000) 
SET @count = 1 
SET @concatcolumns = '' 

WHILE (@count <=52) 
BEGIN 
     IF @COUNT > 1 AND @COUNT <=52 
      SET @concatcolumns = (@concatcolumns + ' + ') 
     SET @concatcolumns = (@concatcolumns + 'CAST ([' + CAST(@count AS NVARCHAR) + '] AS NVARCHAR)') 
     SET @count = (@count+1) 
END 

DECLARE @columns NVARCHAR(4000) 
SET @count = 1 
SET @columns = '' 
WHILE (@count <=52) 
BEGIN 
     IF @COUNT > 1 AND @COUNT <=52 
      SET @columns = (@columns + ',') 
     SET @columns = (@columns + '[' + CAST(@count AS NVARCHAR) + '] ') 
     SET @count = (@count+1) 
END 

SET @query = ' 
SELECT UserID, 
' + @concatcolumns + '  
FROM( 
      SELECT 
         UserID, 
         QuestionNumber AS qNum 
         from QuestionnaireAnswers 
         where QuestionnaireID = 7 
    ) AS t 

     PIVOT 
     (
     COUNT (qNum) 
     FOR qNum IN (' + @columns + ') 
    ) AS PivotTable' 
select @query 
exec(@query) 

回答

1

只要将它转换为nvarchar(MAX) - 这会工作得很好。供参考,你不应该在2005+以上真的使用ntext - 它已被弃用。希望有所帮助。

+0

我通常不会这样做,但这是一个遗留数据库,我还没有建立(是我的老板)。我会尽力使它在某个时候更新,但现在真的没有时间了 – manemawanna 2010-03-29 09:43:20

1

使用函数COALESCE而不是使用while循环创建列名称。还可以使用函数QuoteName将方括号中的列名称。