如何在动态数据透视表中执行显式转换。
我需要转换单个字段的数据类型。
这是我的示例查询
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)
答案 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)