SQL如何创建一个case语句,根据最大的度量单位提取求和qtys



我是SQL的新手,正在尝试为仓库创建一个报告,让他们知道每个入库项目的最大单位总数,以便他们可以准备仓库空间。

笔和铅笔的最大单位是箱子,纸是托盘。我该如何创建一个case语句来按最大单位进行求和和和筛选?

有两张表:";单位;表中包含了所有项目及其基于基本单位的单位。";订单"表中有已订购qty的未结订单。

SELECT O.item, O.unit, sum(O.ordered) 
FROM Orders as O
LEFT JOIN Unit as U on U.item = I.item

Item  Unit    Ordered Order No.
----- ----    ------- ---------
Pen    Each   200     50012
Pen    Each   400     50018
Pen    Case   1       50051
Pencil Each   50      50108
Pencil Case   2       50185
Paper  Case   10      50186
Paper  Sheet  240000  50187
Paper  Case   40      50188
Item   Unit  Unit Size
-----  ----  --------
Pen    Each   1
Pen    Box    20
Pen    Case   200
Pencil Each   1
Pencil Box    10
Pencil Case   50
Paper  Sheet  1
Paper  Ream   300
Paper  Case   6000
Paper  Pallet 120000

结果

Item   Unit   Quantity
----   ----   -------- 
Pen    Case   4
Pencil Case   3
Paper  Pallet 2

您的查询需要GROUP BY:

SELECT O.item, O.unit, SUM(O.ordered) 
FROM Orders O LEFT JOIN
Unit U 
ON U.item = I.item
GROUP BY O.item, O.unit;

这将返回已排序的单位。我不能100%确定这是你真正想要的,尽管这对我来说很有意义

不要以为你在寻找一个case语句,而是一个有趣的联接。这在postgres中有效,row_number((语法可能与您的SQL风格不同。

你需要加入单元表两次。一次,看看订单有多少基本单位。第二次只看每个产品的最大尺寸单元。

运行子查询以查看行级数据,或者运行整个子查询以按项聚合数据。

select item, preferred_unit, sum(qty_largest_units)
from (
select
o.item, 
o.unit, 
o.order_qty, 
u.unit_size, 
o.order_qty*u.unit_size as qty_smallest_units,
largest_tbl.unit, 
largest_tbl.unit_size as preferred_unit,
o.order_qty*u.unit_size/largest_tbl.unit_size as qty_largest_units
from orders o
left join unit u
on u.item = o.item and o.unit = u.unit
left join (
select
item,
unit,
unit_size,
row_number() over (partition by item order by unit_size desc) as rn 
from unit
) largest_tbl
on largest_tbl.rn = 1 and largest_tbl.item = o.item
) subquery
group by item, preferred_unit

最新更新