这是事务明细表
我正在尝试设计一个Mysql库存数据库。我认为每个type: 1
行都是一个产品批次(批次)。
对于每个事务,type
列都有用于IN的1
和用于OUT的0
。detail_id
正在引用id
列。
我怎样才能得到这个结果:
id item sum(quantity)
1 1 3 [10-(5+2)]
4 1 0 (5-5)
6 2 20 20
发布于 2020-03-30 13:56:11
你可以用这个:
SELECT
lots.id,
MIN(lots.item) AS item,
MIN(lots.quantity) - IFNULL(SUM(details.quantity), 0) AS quantity
FROM (
SELECT id, item, quantity
FROM details
WHERE type = 1
) lots LEFT JOIN details ON lots.id = details.detail_id
GROUP BY lots.id
ORDER BY lots.id
发布于 2020-03-30 13:53:00
WITH cte AS (
SELECT *,
SUM(detail_id IS NULL) OVER (PARTITION BY item ORDER BY id) group_num
FROM details
)
SELECT MIN(id) id,
item,
SUM( CASE type WHEN 1 THEN quantity
WHEN 0 THEN -quantity
END ) `sum(quantity)`
FROM cte
GROUP BY item, group_num;
发布于 2020-03-30 14:02:56
我修改了你的小提琴。我确实将一件事更改为您现有的表--您需要指定detail_id (无论它是空的),这样我们就可以对结果进行分组。
最后的查询将类似于
select detail_id, item,
(in_sum - out_sum) as `sum(quantity)` from
(SELECT
detail_id,
item,
sum(case when type=1 then quantity else 0 end) as in_sum,
sum(case when type=0 then quantity else 0 end) as out_sum
FROM details
group by detail_id, item) tab
首先通过对detail_id、item进行分组,得到指定类型的数量之和,然后使用该结果计算最终输出。
https://stackoverflow.com/questions/60931665
复制相似问题