【问题标题】:Hide row with all null value using Dynamic Pivot使用动态透视隐藏所有空值的行
【发布时间】:2014-07-15 17:55:07
【问题描述】:

我问了一个问题并得到了答案,因为我必须使用 Dynamic Pivot Link to Question 并且我得到了很大的帮助。现在,我试图摆脱所有空值的行,但我做不到。

*请注意当前结果的列标题应该是第 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, '') + '
FROM
(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


    【解决方案1】:

    您需要将 where 条件添加到内部查询中,用作 pivot 和列列表查询的源

    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, '') + '
    FROM
    (select SubPart , Part_Number as SpreadCol ,  Quantity
    from test WHERE  Quantity IS NOT NULL  ) as D
    PIVOT
    (
      sum(Quantity) FOR SpreadCol IN ('
      + STUFF(REPLACE(@columns, ', [', ',['), 1, 1, '')
      + ')
    ) AS Pivot1
    '
    

    【讨论】:

    • 我确实尝试将 WHERE Quantity is not null 像您所做的那样,但 null 值仍然返回
    • 我测试过 - 如果我使用 Navicat 程序,它会显示 null,但我使用 SQL Fiddle,然后它不会显示。谢谢 - 我想我得到了它的工作,但只是没有意识到它
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多