Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 动态数据透视表错误_Sql_Sql Server_Tsql_Dynamic_Pivot - Fatal编程技术网

Sql 动态数据透视表错误

Sql 动态数据透视表错误,sql,sql-server,tsql,dynamic,pivot,Sql,Sql Server,Tsql,Dynamic,Pivot,我目前无法使以下各项正常工作。我的数据库中有一个表“tbl_View”,它的行中保存着另一个表的列名(用户可以选择他们希望显示的特定列,他们的选择列表保存在这里) 然后,我想创建一个视图,该视图将只从目标表“AREG”中为每个用户带来特定的列选择,如果可能的话,我想动态地这样做 表示例-AREG列名: ID | Text|u 1 | Text|u 2 | Text|u 3 | Text|u 4等 tbl_查看数据: 视图ID | lblValue | fldName | showYN | sOr

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

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

表示例-AREG列名:

ID | Text|u 1 | Text|u 2 | Text|u 3 | Text|u 4等

tbl_查看数据:

视图ID | lblValue | fldName | showYN | sOrder

10 | EANPR | YesNo8 | True | 80

10 |检查日期|日期| 1 |正确| 81

10 |千克|日期|日期| 2 |真实| 82

11 |生活|数字| 13 |真实| 35

11 |面积|尺寸| 1 |真实| 69

11 |长度|尺寸| 2 |真实| 70

11 | EANPR |是否|正确| 80

12 |旅行|文本|真实| 1

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

12 |斜率| PCT |文本| 3 |真实| 3

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

14 |项目说明|文本| 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,15级,状态1,第1行

“Text_1”附近的语法不正确

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

请帮忙


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

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

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

您可能会看到错误来自@DynamicPivotQuery -你应该从tbl#U视图中选择,而不是#对吗? -你的pivot语句是错误的。应该是这样的

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

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