透视查询替换列名而不是添加新名称

时间:2015-08-16 22:50:25

标签: sql sql-server pivot pivot-table

我正在使用动态数据透视查询来检索数据。但它不是在查询中添加新列,而是替换最后一列。因此,在前端的某个控件上导致数据绑定问题。

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被不同的文本替换。我无法弄清楚导致列名被替换的原因。

1 个答案:

答案 0 :(得分:0)

问题出现在第一行(select语句)中,当变量@colnames附加到以下行时,变量@colnames中的第一列将成为{{1}的别名}。

Vstd

因此在列 '........, IsDeleted,bCensusCount, Vgtl, Vstd ' + @colnames + ' ' + char(13) 之后添加另一个逗号,它应该解决类似的问题....

Vstd