首页 > 解决方案 > 同一张表中的 Sum 和 Substract 列

问题描述

我有下表“TableOfDelivery”,有 4 列

在此处输入图像描述

我已经制定了一个 SQL 查询(访问 2016)来获得2 个不同报告周的2 个交付周之间的差异:

SELECT TOP 2 
 t1.ref, t1.[delivery week], 
 (t2.qty-t1.qty) AS 
QtyDifferenceBetween2DeliveryWeekOn2DifferentWeekReporting
FROM 
  TableOfDelivery AS t1 INNER JOIN TableOfDelivery AS t2 ON (t1.ref = t2.ref) 
AND 
  (t1.[delivery week] = t2.[delivery week]  AND (t1.[reporting week] <> t2. 
[reporting week]) )
GROUP BY t1.[reporting week], t1.ref, t1.[delivery week], t2.qty-t1.qty
ORDER BY t1.[reporting week];

这是此 SQL 查询的结果:

在此处输入图像描述

结果仅适用于匹配的交付周。但我也希望交货周数不匹配,请参见图片以红色和绿色突出显示的线条。

在此处输入图像描述

例如,对于红线和绿线,我也应该在结果查询中包含:

在此处输入图像描述

有没有办法做到这一点?

非常感谢你

标签: sqlms-access

解决方案


您可以尝试使用 aCASE来获得您想要的。

SELECT t1.ref,
       t1.[delivery week],
       (t2.qty-t1.qty) AS QtyDiff,
       t1.[delivery week],
       CASE
           WHEN t1.[reporting week] <> t1.[delivery week] THEN t1.qty *-1
           ELSE t1.qty
       END AS new_qty
FROM TableOfDelivery AS t1
INNER JOIN TableOfDelivery AS t2 ON (t1.ref = t2.ref)
AND (t1.[delivery week] = t2.[delivery week]
     AND (t1.[reporting week] <> t2. [reporting week]))
GROUP BY t1.[reporting week],
         t1.ref,
         t1.[delivery week], (t2.qty-t1.qty),t1.qty
ORDER BY t1.[reporting week];

CASE检查交货周和报告周之间是否存在差异。如果是这种情况,它会为您提供 qty * -1。

我已经在 postgres 上测试过它,但没有在 msaccess 上测试过,因为我的电脑上没有这个数据库。


推荐阅读