0

簡単な質問ですが、nText をピボット テーブルに入力できますか? (SQL サーバー 2005)

私が持っているのは、たとえば次の要素で構成されるアンケートへの回答を記録するテーブルです。

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

答えはnTextに保持されています。とにかく、ピボットテーブルのようなものは次のとおりです。

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)
4

2 に答える 2

1

それを - に変換するnvarchar(MAX)だけで問題なく動作します。参考までに、2005 年以降は使用しないでくださいntext。非推奨です。それが役立つことを願っています。

于 2010-03-22T23:51:05.717 に答える
1

列名を作成する while ループを使用する代わりに、関数 を使用しますCOALESCE。また、関数QuoteNameを使用して、列名を角括弧で囲むこともできます。

于 2012-11-30T12:41:35.130 に答える