SQL pivot需要填0

时间:2015-10-19 14:05:13

标签: sql-server pivot

嗨我有一个很大的问题与数据库ISNULL我尝试将许多主题转换为我的代码,但我失败了。我的代码有错误:

  DECLARE @PivotColumnHeaders VARCHAR(MAX);

    SET @PivotColumnHeaders='';

SELECT @PivotColumnHeaders =@PivotColumnHeaders + '[' + CONVERT(VARCHAR,Magazyn1) + '],'
FROM
 (      
   Select DISTINCT Pro.SC03002 as Magazyn1
   From SC030700 as Pro
 ) as Topa

SET @PivotColumnHeaders = LEFT(ISNULL(@PivotColumnHeaders,0),LEN(@PivotColumnHeaders)-1)
    DECLARE @Column VARCHAR(MAX);
    set @Column =SUBSTRING(( select distinct ',IsNull(['+SC03003+'],0) as ['+SC03003+']' from SC030700 for xml path('')),2,8000)
    DECLARE @cmd VARCHAR(MAX);

-Msg 8114,Level 16,State 5,Line 284(set @column) 将数据类型varchar转换为数字时出错。

    SET @cmd='
SELECT Pro.SC03001 , '+@Column+'
FROM
(                       
  Select Pro.SC03001 , Pro.SC03002, Pro.SC03003
  From SC030700 as Pro
) AS myProducts
PIVOT (SUM(SC03003) FOR SC03002 IN ('+@PivotColumnHeaders+')) dynamicpivot '
EXECUTE (@cmd)

2 个答案:

答案 0 :(得分:0)

您需要显式地将这些数字列转换为varchar,以便将它们连接到字符串:

set @Column =SUBSTRING(( select distinct ',IsNull(['+CAST(SC03003 AS varchar(31))+'],0) as [SC03003]' from SC030700 for xml path('')),2,8000)

答案 1 :(得分:0)

尝试将列SC03003转换为varchar,因为您要将其添加到字符串值中。

set @Column =SUBSTRING(( select distinct ',IsNull(['+ CONVERT(VARCHAR, SC03003)+'],0) as [' + CONVERT(VARCHAR, SC03003) +']' from SC030700 for xml path('')),2,8000)