数据透视查询替换列名而不是添加新列
Pivot query replacing column name instead of adding a new one
我有一个用于检索数据的动态数据透视查询。但不是向查询添加新列,而是替换最后一列。因此导致我的前端控件之一出现数据绑定问题。
Set @SQL = 'WITH ResultTable AS (' + char(13)
Set @SQL = @SQL + 'Select row_number() OVER (Order By CensusId) AS RowNum ,QuoteId, CensusId, FirstName, LastName, MiddleName, InputAge, Gender, SalaryAmount, SalaryTypeId, IsDeleted,bCensusCount, Vgtl, Vstd ' + @colnames + ' ' + char(13)
Set @SQL = @SQL + 'From (Select F.CensusId, ColumnName, ColumnValue, QuoteId, FirstName, LastName, MiddleName, InputAge, Gender, SalaryAmount, SalaryTypeId, IsDeleted,bCensusCount, Vgtl, Vstd ' + char(13)
Set @SQL = @SQL + 'FROM #TblX F LEFT OUTER JOIN Census.tbl_Census c ON F.CensusId = c.CensusId) P ' + char(13)
Set @SQL = @SQL + 'Pivot (Max(ColumnValue) For ColumnName In (' + @colnames + ')) as Pvt ' + char(13)
Set @SQL = @SQL + ') SELECT * FROM ResultTable ' + char(13)
Set @SQL = @SQL + 'Where RowNum > ' + CAST(@FirstRec as varchar) + ' and RowNum < ' + CAST(@LastRec as varchar)
Exec (@SQL)
Vgtl 和 Vstd 是我添加的列。 Vgtl 显示正常,但 Vtsd 被不同的文本替换。我不知道是什么导致列名被替换。
问题出在第一行(select 语句),当变量 @colnames
附加到下一行时,变量 @colnames
中的第一列将变为Vstd
.
的别名
'........, IsDeleted,bCensusCount, Vgtl, Vstd ' + @colnames + ' ' + char(13)
因此,在 Vstd
列之后添加另一个逗号,它应该可以解决类似....
的问题
'........, IsDeleted,bCensusCount, Vgtl, Vstd, ' + @colnames + ' ' + char(13)
我有一个用于检索数据的动态数据透视查询。但不是向查询添加新列,而是替换最后一列。因此导致我的前端控件之一出现数据绑定问题。
Set @SQL = 'WITH ResultTable AS (' + char(13)
Set @SQL = @SQL + 'Select row_number() OVER (Order By CensusId) AS RowNum ,QuoteId, CensusId, FirstName, LastName, MiddleName, InputAge, Gender, SalaryAmount, SalaryTypeId, IsDeleted,bCensusCount, Vgtl, Vstd ' + @colnames + ' ' + char(13)
Set @SQL = @SQL + 'From (Select F.CensusId, ColumnName, ColumnValue, QuoteId, FirstName, LastName, MiddleName, InputAge, Gender, SalaryAmount, SalaryTypeId, IsDeleted,bCensusCount, Vgtl, Vstd ' + char(13)
Set @SQL = @SQL + 'FROM #TblX F LEFT OUTER JOIN Census.tbl_Census c ON F.CensusId = c.CensusId) P ' + char(13)
Set @SQL = @SQL + 'Pivot (Max(ColumnValue) For ColumnName In (' + @colnames + ')) as Pvt ' + char(13)
Set @SQL = @SQL + ') SELECT * FROM ResultTable ' + char(13)
Set @SQL = @SQL + 'Where RowNum > ' + CAST(@FirstRec as varchar) + ' and RowNum < ' + CAST(@LastRec as varchar)
Exec (@SQL)
Vgtl 和 Vstd 是我添加的列。 Vgtl 显示正常,但 Vtsd 被不同的文本替换。我不知道是什么导致列名被替换。
问题出在第一行(select 语句),当变量 @colnames
附加到下一行时,变量 @colnames
中的第一列将变为Vstd
.
'........, IsDeleted,bCensusCount, Vgtl, Vstd ' + @colnames + ' ' + char(13)
因此,在 Vstd
列之后添加另一个逗号,它应该可以解决类似....
'........, IsDeleted,bCensusCount, Vgtl, Vstd, ' + @colnames + ' ' + char(13)