我有一个Oracle SQL查询,我在其中透视数据。我遇到的问题是,数据透视数据中的某些记录始终具有空值。我的查询看起来像这样,
select product, type, month, sum(case when variable = 'LY' then value end) as "LY",
sum(case when variable = 'TY' then value end) as "TY",
sum(case when variable = 'NY' then value end) as "NY"
from tbl_sales
group by
product, type, month
我的记录集如下所示,
Product type month LY TY NY
AA1 2 1 20 30 40
AA2 4 1 30 50 60
AA3 4 1 NULL NULL NULL
AA4 3 1 NULL NULL NULL
此结果只是数据的一小部分,总共有大约15个旋转列。我遇到的问题是最后两个记录(产品AA3和AA4,我可能有他们。如何过滤这些类型的记录,而不对每列或一列的过滤,然后过滤?< / p>
答案 0 :(得分:0)
你的问题不清楚。如果您想删除具有null
值的记录,请添加where value <> null
。 (但是这仍会导致某些列中包含null
的记录 - 如果该列没有值..)
如果您希望使用不为null的其他默认值,而不是在每个列case when
中指定它,那么您可以:
select product, type, month, sum(case when variable = 'LY' then value end) as "LY",
sum(case when variable = 'TY' then value end) as "TY",
sum(case when variable = 'NY' then value end) as "NY"
from (select product, type, month, variable, case when value is null then 0 else value end value from tbl_sales)
(但将其设为0与将其作为null
)