Sql 动态数据透视表错误
我目前无法使以下各项正常工作。我的数据库中有一个表“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 代码是: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
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查询之后,我能够编辑代码以获得正确的结果。