【问题标题】:SQL pivot need fill 0SQL 数据透视需要填充 0
【发布时间】:2015-10-19 14:05:12
【问题描述】:

嗨,我对枢轴 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个变量的值是什么或者cmd的内容是什么?
  • 我如何检查这个?我们没有安装调试器。我只知道如何在 VS 中调试。
  • Meyby 是否存在填充空值的简单提示? :)
  • 你的错误是因为你试图做类似'Hey' + 10的事情。你不能用这种方式连接一个varchar和一个int。你要么需要将10 作为一个varchar 或者如果您使用的是 SQL 2012,您可以使用 CONCAT('Hey', 10)
  • 你也在总结 SC03003 那么你为什么在你的 @Columns 中使用那个字段.. 你不应该使用 SC03002 来代替

标签: sql-server pivot


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 哎呀,是的,我修好了。
    • 无法转换是什么意思?
    • Goooood :) 但我有更多错误,但这是我的错 :)
    猜你喜欢
    • 1970-01-01
    • 2016-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-24
    • 1970-01-01
    相关资源
    最近更新 更多