【问题标题】:SQL Code to compare and do cumulative based on conditionSQL代码根据条件进行比较和累积
【发布时间】:2018-02-02 15:54:09
【问题描述】:

如图所示:

这里我需要根据一个条件进行累加:

我有

   Column 1: Sales Date
   Column 2: Warranty End Date
   Column 3: Qty of Sales
   Column 4: Cumulative Sales Qty

现在是第 5 列:在保修期内,此处给出了错误的值 当保修日期完成 365 天(到期)时,我需要在保修期内计数列中减去该到期日发生的销售额,类似于保修到期后的接下来几天的计数开始减少。

例如图中: 2014 年 1 月 1 日的累计销售额为 246,当它达到 2015 年 1 月 1 日时,我需要从 '96502' 中减去 '246',这是直到 的累计销售额>2015 年 1 月 1 日。所以应该是 96256

我们如何在SQL中实现'Under保修计数'列的逻辑

我的查询:

SELECT a."sales_year", 
       a."sales_billing_date", 
       a."warranty_end_date", 
       a."sum_val", 
       a."order_qty", 
       CASE 
         WHEN Sum(Days_between (a."warranty_end_date", a."sales_billing_date")) 
              < 365 
       THEN a."sum_val" 
         ELSE ( ( a."sum_val" ) - ( b."sum_val" ) ) 
       END AS "Under_Warranty" 
FROM   "_SYS_BIC"."pal/cv_pal_tbf_sales" a, 
       "_SYS_BIC"."pal/cv_pal_tbf_sales" b 
GROUP  BY a."sales_year", 
          a."sales_billing_date", 
          a."warranty_end_date", 
          a."order_qty", 
          b."sum_val", 
          a."sum_val"; 

【问题讨论】:

    标签: mysql sql hana


    【解决方案1】:

    假设 SALES_BILLING_DATEWARRANTY_END_DATE 在整个表中相隔 1 年,您可以通过匹配表中每个实例的上述两列并对 UNDER_WARRANTY 数量进行减法来进行自联接。

    SELECT A.SALES_YEAR, A.SALES_BILLING_DATE, A.WARRANTY_END_DATE, A.SUM_VAL, A.ORDER_QTY,
    (A.UNDER_WARRANTY - B.UNDER_WARRANTY) AS UNDER_WARRANTY_NEW
    FROM
    YOUR_TABLE A
    INNER JOIN
    YOUR_TABLE B
    ON A.SALES_BILLING_DATE = B.WARRANTY_END_DATE;
    

    要在输出中保留 2014 年的条目,请尝试以下查询。更改为具有相同ON 条件的左连接,如果没有匹配,则UNDER_WARRANTY 数量保持不变。

    SELECT A.SALES_YEAR, A.SALES_BILLING_DATE, A.WARRANTY_END_DATE, A.SUM_VAL, A.ORDER_QTY, 
    CASE WHEN B.WARRANTY_END_DATE IS NOT NULL THEN (A.UNDER_WARRANTY - B.UNDER_WARRANTY) ELSE A.UNDER_WARRANTY END AS UNDER_WARRANTY_NEW
    FROM
    YOUR_TABLE A
    LEFT JOIN
    YOUR_TABLE B
    ON A.SALES_BILLING_DATE = B.WARRANTY_END_DATE;
    

    【讨论】:

    • 如何包含 2014 年数据,因为当内部连接发生时 2014 年消失,但我应该使用相同的 a."UNDER_WARRANTY" 值更新 2014 年数据。例如:WHEN (a."Sales_Year" = 2014 ) THEN a."UNDER_WARRANTY"
    • 非常感谢。你能帮忙解决一个类似的问题吗stackoverflow.com/questions/48577382/…
    猜你喜欢
    • 2016-06-06
    • 2022-01-23
    • 2020-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多