2010-03-19 92 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將方括號中的列名稱。