使用动态透视隐藏所有空值的行

0 人关注

我问了一个问题,答案是我必须使用动态透视 链接到问题 ,我得到了很大的帮助。现在,我正试图摆脱所有空值的行,但我不能。

*请注意,当前结果的列头应该是第01部分、第ABC部分和第03部分(而不是如图所示的0)。

WHERE SubPart IS NOT NULL/ WHERE  Quantity IS NOT NULL 

但它没有起作用(好吧,它仍然在查询,但有空值)。

在FROM和from语句之后

DECLARE @columns NVARCHAR(MAX)      
       ,@sql NVARCHAR(MAX)
SET @columns = N''
--Get column names for entire pivoting
SELECT @columns += N', ' + QUOTENAME(SpreadCol)
  FROM (select distinct Part_Number as SpreadCol 
        from test
       ) AS T
--select @columns
SET @sql = N'
SELECT SubPart, ' + STUFF(@columns, 1, 2, '') + '
(select SubPart , Part_Number as SpreadCol ,  Quantity
from test ) as D
PIVOT
  sum(Quantity) FOR SpreadCol IN ('
  + STUFF(REPLACE(@columns, ', [', ',['), 1, 1, '')
  + ')
) AS Pivot1
--select @sql
EXEC sp_executesql @sql
    
sql
sql-server
sql-server-2008
user2103670
user2103670
发布于 2014-07-16
1 个回答
Kiran Hegde
Kiran Hegde
发布于 2014-07-16
已采纳
0 人赞同

你需要在内部查询中添加where条件,该查询被用作piovot和列列表查询的来源

DECLARE @columns NVARCHAR(MAX)      
       ,@sql NVARCHAR(MAX)
SET @columns = N''
--Get column names for entire pivoting
SELECT @columns += N', ' + QUOTENAME(SpreadCol)
  FROM (select distinct Part_Number as SpreadCol 
        from test WHERE  Quantity IS NOT NULL 
       ) AS T
--select @columns
SET @sql = N'
SELECT SubPart, ' + STUFF(@columns, 1, 2, '') + '
(select SubPart , Part_Number as SpreadCol ,  Quantity
from test WHERE  Quantity IS NOT NULL  ) as D
PIVOT
  sum(Quantity) FOR SpreadCol IN ('