【问题标题】:Can Sql Server 2005 Pivot table have nText passed into it?Sql Server 2005 Pivot 表可以传入 nText 吗?
【发布时间】:2010-03-19 12:07:50
【问题描述】:

我可以将 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

答案保存在 nText 中。无论如何,像数据透视表这样的 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)

【问题讨论】:

    标签: sql sql-server-2005 pivot pivot-table


    【解决方案1】:

    只需将其转换为nvarchar(MAX) - 就可以了。仅供参考,您不应该在 2005 年以上使用 ntext - 它已被弃用。希望对您有所帮助。

    【讨论】:

    • 我通常不会,但这是一个我没有建立的遗留数据库(是我的老板)。我会在某个时候将其更新,但现在真的没有时间大声笑
    【解决方案2】:

    使用函数COALESCE,而不是使用while 循环生成列名。您也可以使用函数QuoteName 将列名放在方括号中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-02
      • 2012-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-13
      • 2014-06-18
      • 1970-01-01
      相关资源
      最近更新 更多