仓库数据库中有多个波次。每波都有一定数量的纸箱,需要从仓库中取出并运送到指定区域,纸箱中的物品将被消耗。数据库结构是基于任务的。因此任务编号包含波次、箱号、箱内数量、消耗数量、任务状态。当状态为 0 时,启动任务,当状态为 1 时,将纸箱扔到某个地方并消耗数量。因此纸箱中的数量和消耗的数量发生了变化。两列可以相等,表明纸箱中的数量已完全消耗并且纸箱已损坏。如果没有,那就去预订。我想知道有多少病例被保留以及每波的百分比。
我正在使用以下查询:
SELECT wave, COUNT(carton)
From Database
WHERE task NOT LIKE '%K%'
AND status = '1'
AND quantity_inCarton != quantity_consumed
GROUP BY wave
产生
挥挥手,不。要预订的纸箱数量
我想包括另一列,显示没有的百分比。总纸箱中要保留的纸箱数量(该波中的总纸箱数量可以通过状态 = 1 和不包含字母 K 的任务编号进行过滤)
基本上,
过滤器 1 - 不带字母 K 的任务编号和编号为 1 的状态给出了该批次中的纸箱总数
过滤器 2 - 过滤器 1 + 装箱数量 != 消耗数量给出了要预订的箱子。
谢谢你。
用我提出的解决方案修改您上面的评论。 我不能保证你在 case 语句中的逻辑,但这就是我对 1 和 0 的理解。另外,我用第一个表达式作为第二个表达式的分子:
SELECT wave
, SUM(CASE WHEN status = '1' AND task NOT LIKE '%K%' AND quantity_inCarton != quantity_consumed THEN 1 ELSE 0 END) as exp1
, 100 * exp1 / SUM(CASE WHEN status = '1' AND task NOT LIKE '%K%' THEN 1 ELSE 0 END)
FROM Database
GROUP BY wave;
您可能还想在分母周围使用
NULLIF
来处理分母的 0/溢出问题。