SQL 根据条件进行比较和累加的代码

SQL Code to compare and do cumulative based on condition

如图:

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

我有

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

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

例如图中: 2014 年 1 月 1 日到 2015 年 1 月 1 日累计销售额为 246,我需要从 '96502' 中减去 '246',即截至 2015 年 1 月 1 日的累计销售额。所以应该是 96256

我们如何实现 SQL 中 'Under warranty count' 列的逻辑

我的查询:

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"; 

假设 SALES_BILLING_DATE AND WARRANTY_END_DATE 在整个 table 中相隔 1 年,您可以通过匹配 [=21= 的每个实例中的以上两列来进行自连接] 并对 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;