Может ли сводная таблица Sql Server 2005 передавать nText в нее? - PullRequest
0 голосов
/ 19 марта 2010

Правильный ответ на простой вопрос: можно ли ввести nText в сводную таблицу? (SQL Server 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

Ответы хранятся в текстовом формате. Как бы то ни было, для идентификатора сводной таблицы:

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)

Ответы [ 2 ]

1 голос
/ 30 ноября 2012

Вместо использования цикла while для создания имен столбцов используйте функцию COALESCE. А также вы можете использовать функцию QuoteName, чтобы сделать имя столбца в квадратных скобках.

1 голос
/ 23 марта 2010

Просто конвертируйте его в nvarchar(MAX) - все будет работать отлично. К вашему сведению, вы не должны использовать ntext под 2005+ - это устарело. Надеюсь, это поможет.

...