cwui 2024-12-08 10:29 采纳率: 43.3%
浏览 35
已结题

SAP HANA SQL Script 。SUM OVER 怎么加where

如下图:

img

当COMP = 'C1'时,逐月累计QUAT,

select COMP, sum(QUAT) over(partition by COMP order by YMONTH) as "QUAT" from table
where COMP= 'C1'

问题:
sum() over(partition by )能否使用where,即where 不写在最后,而是放在sum over里面,怎么写 ?
比如 , sum() over(partition by ..where..)

  • 写回答

18条回答 默认 最新

  • 专家-皆知 2024-12-08 10:30
    关注

    参考免费微信小程序:皆我百晓生 作答,经由专家-皆知整理回复,如问题解决,望采纳;如仍有疑问,请评论回复。

    在SQL中,WHERE子句不能直接放入OVER()窗口函数中。OVER()函数是用来定义窗口或分区,用于计算如SUM(), AVG()等聚合函数,但它本身不支持内部的条件过滤。要实现类似的需求,比如仅对满足特定条件的行进行累计求和,你需要采用一种技巧,通常这涉及使用CASE语句来控制哪些值被纳入求和计算中。

    针对您的需求,想要对COMP = 'C1'的记录进行逐月累计QUAT,可以这样写SQL语句:

    SELECT
        COMP,
        YMONTH,
        QUAT,
        SUM(CASE WHEN COMP = 'C1' THEN QUAT ELSE 0 END) 
            OVER (PARTITION BY COMP ORDER BY YMONTH ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS "QUAT_CUMULATIVE"
    FROM
        your_table
    WHERE
        COMP = 'C1';
    

    这段代码中,CASE WHEN COMP = 'C1' THEN QUAT ELSE 0 END确保了只有当COMP等于'C1'时,QUAT值才被加入到累计求和中,对于其他情况则贡献为0,从而实现了在累加过程中的条件过滤效果。这里使用了ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW来确保累积是按YMONTH顺序进行的,从第一行开始累积到当前行。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(17条)

报告相同问题?

问题事件

  • 系统已结题 12月16日
  • 已采纳回答 12月8日
  • 创建了问题 12月8日