我正在使用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的值。
答案 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),但他们都没有这么做。我该如何拆分?