如何在动态数据透视中执行显式转换

时间:2014-01-07 11:39:06

标签: sql sql-server pivot

如何在动态数据透视表中执行显式转换。

我需要转换单个字段的数据类型。

这是我的示例查询

SELECT @cols = STUFF((SELECT ',' + (QUOTENAME(P.ColumnName))from #temp as p 
JOIN information_schema.columns as C ON P.ColumnName=C.column_name
where C.table_name='tablename'

SET @query = 'SELECT ' + @cols + 'from (select ColumnVlaue, ColumnName from #temp) x
              pivot(max(ColumnVlaue) for ColumnName in (' + @cols + ')) p '

EXECUTE(@query) 

1 个答案:

答案 0 :(得分:1)

您在构建@cols变量时执行此操作。

实际上你需要第二个@cols变量@cols2来保存带有强制转换表达式的列。

如果@cols包含Col1, Col2,则@Cols2应为cast(Col1 as int) as Col1, cast(Col2 as int) as Col2

在选择列列表中使用@Cols2,在透视列列表中使用@Cols

SET @query = 'SELECT ' + @cols2 + 'from (select ColumnVlaue, ColumnName from #temp) x
              pivot(max(ColumnVlaue) for ColumnName in (' + @cols + ')) p '

EXECUTE(@query)