动态数据透视表错误

时间:2014-08-19 02:47:24

标签: sql sql-server tsql dynamic pivot

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

然后,我想要创建一个视图,该视图只会为目标表中的每个用户提供特定的列选择' AREG'如果可能的话,我想动态地这样做。

表格样本 - AREG列名称:

  

ID | Text_1 | Text_2 | Text_3 | Text_4等...

tbl_View数据:

  

ViewID | lblValue | fldName | showYN | sOrder

     

10 | EANPR |是号8真的80

     

10 | INSP_DATE | Date_1 |真的81

     

10 | KG_DATE | Date_2 |真的82

     

11 |生活| Num_13 |真的35

     

11 |区域| Dimension_1 |真的69

     

11 |长度| Dimension_2 |真的70

     

11 | EANPR |是号8真的80

     

12 |旅行| Text_1 |真的1

     

12 | SPILLLVE | Text_2 |真的2

     

12 | SLOPE_PCT | Text_3 |真的3

     

14 | Project_Name | Text_1 |真的1

     

14 |项目描述| Text_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

我一直收到错误:

  

Msg 102,Level 15,State 1,Line 1

     

Text_1'附近的语法不正确。

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

请帮忙。

由于

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

您可能会看到错误来自@DynamicPivotQuery - 你应该从tbl_View而不是#AREG中选择对吗? - 您的枢轴声明错误。它应该像

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