【问题标题】:Pivot table how to not allow nulls in multiple columns数据透视表如何不允许多列中的空值
【发布时间】:2017-02-01 20:20:13
【问题描述】:

如果[2015] 和[2016] 为NULL,我想设置一个条件,然后隐藏行, 但我不能把它拉下来。

如果没有数据,我对 billname 不感兴趣。

SELECT 
    IssuedByUserGroup,
    BILLNAME, 
    SUM([2016]) AS [2016],
    SUM([2015])AS [2015]
FROM Sum_Orders 
PIVOT
(
    SUM(Sum_SellPrice)
        FOR OrderperiodYear IN ([2016],[2015]) 
) AS pvt
WHERE  ( (MONTH(OrderDate) = MONTH(GETDATE()) 
    AND day(OrderDate) <= DAY(GETDATE())) OR MONTH(OrderDate) < MONTH(GETDATE())) 
--This part above is just for getting the data since january 1 to sep 23(to the date)
    AND OrderStatus in ('Complete','invoiced') 
    AND OrderPrefix IN ('LAX6') 
GROUP BY BILLNAME,IssuedByUserGroup
ORDER BY IssuedByUserGroup desc

这将按预期返回以下内容:

谢谢!

【问题讨论】:

    标签: sql sql-server tsql filter pivot


    【解决方案1】:

    您应该能够在 PIVOT 下方使用 WHERE 子句,如下所示:

    WHERE [2015] IS NOT NULL
    

    【讨论】:

      【解决方案2】:

      在GROUP BY 部分下添加COALESCE:

      HAVING COALESCE(SUM([2016]), SUM([2015])) IS NOT NULL
      

      【讨论】:

      • 谢谢它确实有效,如果你能解释为什么它有效,我将不胜感激?
      • COALESCE 取第一个值,检查它是否为 NULL,如果不是 NULL - 返回此值。如果传递的第一个值为 NULL - 转到下一个值并进行相同的检查。如果所有传递的值都是 NULL - 它返回 NULL。您不能在 WHERE 部分使用 SUM(聚合函数),这就是您需要使用 HAVING 的原因。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-14
      • 2012-05-01
      • 2010-10-05
      • 2020-05-05
      • 2019-03-14
      相关资源
      最近更新 更多