You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在HANA中排除全空行及优化日期维度销售采购查询

SAP HANA数据过滤问题解决方案

1. 如何排除所有列均为NULL值的数据行?

要剔除表中所有列都为NULL的行,有两种简单可靠的实现方式:

  • 明确列判断法:直接通过逻辑条件检查每一列,确保不是所有列都为空。假设你的表包含col1、col2、col3三列,写法如下:
    SELECT * FROM your_table
    WHERE NOT (col1 IS NULL AND col2 IS NULL AND col3 IS NULL);
    
    这种方式逻辑清晰,适合列数较少的场景,可读性强。
  • COALESCE函数简化法:利用COALESCE返回第一个非NULL值的特性,如果所有列都为NULL,函数会返回NULL,以此作为判断依据:
    SELECT * FROM your_table
    WHERE COALESCE(col1, col2, col3) IS NOT NULL;
    
    这种写法更简洁,当需要检查的列数较多时,能大幅缩短代码长度。

2. 你的销售/采购日期查询的针对性调整

核心需求:保留那些至少有销售数据或采购数据的日期行,仅剔除两者都为空的日期。你之前尝试的CONCAT和简单IS NOT NULL方法出错,原因在于:

  • CONCAT(Sales, Purchases)只要其中一个参数是NULL,结果就会是NULL,和空字符串''比较时,会误把“有销售无采购”或“有采购无销售”的有效行也过滤掉;
  • 如果用Sales IS NOT NULL AND Purchases IS NOT NULL,又会错误剔除仅单一列有值的行,不符合你的业务需求。

修改后的完整查询代码

Do Begin
Declare FromD Date;
Declare ToD Date;
FromD := '20200201';
ToD := '20200228';
TBLSALES = Select "OINV"."DocDate",Sum("OINV"."DocTotal") as "Sales" 
           From "TNP_AGE_LIVE"."OINV" 
           where "OINV"."DocDate" between :FromD and :ToD 
           Group by "OINV"."DocDate" 
           Order by "OINV"."DocDate";
TBLPURCHASE = Select "OPCH"."DocDate",Sum("OPCH"."DocTotal")as "Purchase" 
              From "TNP_AGE_LIVE"."OPCH" 
              where "OPCH"."DocDate" between :FromD and :ToD 
              Group by "OPCH"."DocDate" 
              Order by "OPCH"."DocDate";
SELECT to_date(GENERATED_PERIOD_START) as "Date",:TBLSALES."Sales",:TBLPURCHASE."Purchase" 
FROM SERIES_GENERATE_TIMESTAMP('INTERVAL 1 DAY', :FromD, :ToD ) 
Left Join :TBLSALES on :TBLSALES."DocDate"=to_date(GENERATED_PERIOD_START) 
Left Join :TBLPURCHASE on :TBLPURCHASE."DocDate" = to_date(GENERATED_PERIOD_START) 
-- 关键调整:仅排除销售和采购数据均为空的行
WHERE NOT (:TBLSALES."Sales" IS NULL AND :TBLPURCHASE."Purchase" IS NULL);
End

逻辑说明

这里的WHERE NOT (Sales IS NULL AND Purchase IS NULL)等价于WHERE Sales IS NOT NULL OR Purchase IS NOT NULL,两种写法都能精准实现你的需求:只要销售或采购任意一列有值(哪怕另一列为NULL),就保留该行;只有当两者都为空时才剔除。

你也可以用COALESCE函数简化这个条件,效果完全一致:

WHERE COALESCE(:TBLSALES."Sales", :TBLPURCHASE."Purchase") IS NOT NULL;

内容的提问来源于stack exchange,提问作者Kith

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 10:07:26