具有临时表的数据透视表(列的定义必须包括数据类型) - SQL Server 2008

时间:2013-08-26 13:24:57

标签: sql-server-2008 tsql pivot

以下是返回两个错误: ''0.63'列的定义必须包含数据类型。 'INSERT语句的选择列表包含的项目少于插入列表。 SELECT值的数量必须与INSERT列的数量匹配。'

我知道我需要为插入到临时表中的列分配数据类型但是我不太明白如何使用动态代码执行此操作。老实说,如果我能对@cols变量代码的工作方式有所解释,然后帮助解决我的具体问题,那将会有很大的帮助。 fldPK是数据类型INT,而数据透视字段,即@cols,都是FLOAT数据类型。

DECLARE @cols AS NVARCHAR(MAX),
        @query  AS NVARCHAR(MAX);

    select @cols = STUFF((SELECT distinct ',' + QUOTENAME(fldCI) 
                        from FN_qryT_1()
                FOR XML PATH(''), TYPE
                ).value('.', 'NVARCHAR(MAX)') 
            ,1,1,'')

    set @query = 'SELECT fldPK, ' + @cols + '
                    FROM 

                    (
                    SELECT   fldPK
                            ,fldNI
                            ,fldCI
                    FROM FN_qryT_1()    
                    ) as x
                    PIVOT
                    (
                        Sum(fldNI) FOR fldCI IN (' + @cols + ')
                    ) as p 

                DECLARE @TPS TABLE
                (
                    ' + @cols + ' 
                )

                INSERT @TPS (' + @cols + ')

                SELECT fldPK, [1], [2], [3], [4], [5]
                FROM @TPS
                WHERE ((([1])<10)) OR ((([2])<10)) OR ((([3])<10))'

                exec sp_executesql @query

0 个答案:

没有答案