unpivot null变为空字符串SQL Server 2014

时间:2016-10-12 18:23:06

标签: sql sql-server unpivot

我正在使用SQL Server 2014 RTM Developer Edition。我在SSMS中使用我的查询而不是在SSIS中。我在UNPIVOT函数中使用的表中有很多NULL值。在Unpivot之后,由于NULL,我没有看到这些行成为列。如果我使用@NULL,那么我会正确地看到所有数据。

所以我从微软发现了SSIS的一些修补程序(不适用于SSMS问题)。 https://support.microsoft.com/en-us/kb/3058512 我没有应用该修补程序,而是安装了SQL 2014 SP2并重新启动了计算机。 没有区别。

然后我安装了SQL Server 2014 SP2的累积更新1,但仍然是一样的。为什么会这样?

DECLARE @colsUnpivot NVARCHAR(MAX)
       ,@query  VARCHAR(MAX)
       ,@Table_name  NVarchar(500)
       ,@fiscal_year Varchar(4) 

      SET @Table_name = 'opd_scholar'
      SET @fiscal_year = '2015'

       set @colsUnPivot = STUFF((SELECT ',' + QUOTENAME(code_name) from  opd_lkp_scholar t Where fiscal_year = 2015 AND code_name NOT IN    ('UNITID','Institution','City','State','Zip') FOR XML PATH(''), TYPE          ).value('.', 'NVARCHAR(MAX)') ,1,1,'') 
       PRINT @colsUnPivot

        set @query 
        = ' INSERT INTO opd_scholar_transaction (    unitid,institution,city,state,zip,code_name,lkp_value) 
    SELECT unitid,institution,city,state,zip,code_name,lkp_value
     FROM  
     (
      SELECT unitid,institution,city,state,zip, '+ @colsUnpivot+'
        FROM '+@Table_name+') AS cp
         UNPIVOT (lkp_value for code_name  IN ('+@colsUnPivot+')
         ) AS up'
       PRINT @Query
           exec(@query)

在我的opd_Scholar表中,我有400列,我需要它们作为行转换。 我在opd_scholar表中有很多NULL值。但是当我使用上面的代码将这些行转换为列时,它没有显示那些具有NULL的值。

2 个答案:

答案 0 :(得分:0)

不确定你要求的是什么。但请尝试isnull(YOURVALUE,'')

答案 1 :(得分:0)

谢谢,我发现NULL为0解决方案但是

    set @colsUnPivot = STUFF((SELECT ',' +  'ISNULL(' + QUOTENAME(code_name) + ', 0) AS ' + QUOTENAME(code_name) from opd_lkp_scholar t Where fiscal_year = 2015 AND code_name NOT IN ('UNITID','Institution','City','State','Zip') FOR XML                    PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)') ,1,1,'') 
   PRINT @colsUnPivot

但是我有超过400列,而@query是varchar(max),但他们都没有这么做。我该如何拆分?