【问题标题】:Dynamic Pivot table error动态数据透视表错误
【发布时间】:2014-10-12 01:19:15
【问题描述】:

我目前无法使以下工作正常进行。我有一个表,'tbl_View',存在于我的数据库中,它的行中保存了另一个表的列名(用户可以选择他们希望显示的特定列,他们的选择列表保留在这里)。

然后我想创建一个视图,该视图将只从目标表“AREG”中为每个用户提供特定的列选择,并且如果可能的话希望动态地这样做。

表样本 - AREG 列名:

ID |文本_1 |文本_2 |文本_3 | Text_4 等...

tbl_查看数据:

查看 ID | lbl值 |名称 |秀YN |排序

10 | EANPR |是否8 |真 | 80

10 | INSP_DATE|日期_1 |真 | 81

10 | KG_DATE |日期_2 |真 | 82

11 |生活 | Num_13 |真 | 35

11 |面积 |维度_1 |真 | 69

11 |长度 |维度_2 |真 | 70

11 | EANPR |是否8 |真 | 80

12 |旅游 |文本_1 |真 | 1

12 |溢出 |文本_2 |真 | 2

12 | SLOPE_PCT|文本_3 |真 | 3

14 |项目名称 |文本_1 |真 | 1

14 |项目描述 |文本_2 | 2

代码是:

DECLARE @DynamicPivotQuery AS NVARCHAR(MAX)
DECLARE @ColumnName AS NVARCHAR(MAX)

--Get distinct values of the PIVOT Column 
SELECT @ColumnName= ISNULL(@ColumnName + ',','') + QUOTENAME(fldName)
FROM (SELECT DISTINCT fldName FROM qry_ADet WHERE (Viewid=14)) AS fname 

--Prepare the PIVOT query using the dynamic 
SET @DynamicPivotQuery = N'SELECT ' + @ColumnName + ' FROM #AREG   PIVOT ' + @ColumnName + ' AS PVTTable'
--Execute the Dynamic Pivot Query
EXEC sp_executesql @DynamicPivotQuery

我不断收到错误:

消息 102,第 15 级,状态 1,第 1 行

“Text_1”附近的语法不正确。

我已将视图 ID 硬编码到此示例的查询中,但将在我的最终查询中使用一个参数,因为它将被 asp.net 数据源引用。但如果更改 Viewid 子句,错误会指向不同的列名。

请帮忙。

谢谢

【问题讨论】:

  • 如果您编辑问题以打印出@DynamicPivotQUery,您可能会发现问题。 pivot 语法看起来不正确。
  • 你需要STUFF()FOR XML PATH来连接你的列名
  • 感谢您的提示。打印 DynamicPivot 查询后,我能够编辑我的代码以获得正确的结果。

标签: sql sql-server tsql dynamic pivot


【解决方案1】:

评论太长了,我认为问题可能源于列连接,它需要这样的东西:

SET @ColumnName = STUFF((SELECT distinct ',' + QUOTENAME(fldName) 
            FROM qry_ADet
             WHERE (Viewid=14)
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')

【讨论】:

    【解决方案2】:

    要调试动态 sql 查询,请在执行前执行 PRINT 语句。

    您可能会看到错误来自@DynamicPivotQuery - 你应该从 tbl_View 而不是#AREG 中选择,对吗? - 你的支点陈述是错误的。应该是这样的

    FROM sometable
    PIVOT
    (
         sum( somecol)
         for anothercol in ( [value1], [value2] , [value3] )
    ) p
    

    【讨论】:

    • 感谢您的提示。打印 DynamicPivot 查询后,我能够编辑我的代码以获得正确的结果。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-16
    • 2010-12-28
    • 2023-03-08
    相关资源
    最近更新 更多