我试图减去产品内部的数量,将产品添加到发票中。为了弄清楚有多少产品有现货。
SELECT
w_prod.prod_article_pvt_uuid
,sum(coalesce(w_prod.quantity, 0) - coalesce(s_item.quantity, 0)) as available
FROM products w_prod
LEFT JOIN items s_item ON s_item.whse_prod_pvt_uuid = w_prod.whse_prod_pvt_uuid
LEFT JOIN documents s_doc ON s_item.sale_doc_pvt_uuid = s_doc.sale_doc_pvt_uuid
GROUP BY w_prod.prod_article_pvt_uuid
预期产出如下:
+--------------------------------------+-----------+
| prod_article_pvt_uuid | available |
+--------------------------------------+-----------+
| 470fda1a-54ab-11ea-a21d-de2e50192004 | 5 |
| 9a59a5ba-5ad8-11ea-a21d-de2e50192004 | 10 |
| c2c98260-5482-11ea-a21d-de2e50192004 | 9 |
+--------------------------------------+-----------+
但是上面的查询在 c2c98260-5482-11ea-a21d-de2e50192004
返回 21
相反。
看看sqlfiddle:http://sqlfiddle.com/#!2009年9月17日
你知道我做错了什么吗?怎么解决?
table:
create table products
(
whse_prod_pvt_uuid uuid default uuid_generate_v1() not null
primary key,
t timestamp with time zone default CURRENT_TIMESTAMP(6),
prod_article_pvt_uuid uuid not null,
quantity numeric(16,6) default 1
);
create table documents
(
sale_doc_pvt_uuid uuid default uuid_generate_v1() not null
primary key,
t timestamp with time zone default CURRENT_TIMESTAMP(6)
);
create table items
(
sale_item_pvt_uuid uuid default uuid_generate_v1() not null
primary key,
t timestamp with time zone default CURRENT_TIMESTAMP(6),
sale_doc_pvt_uuid uuid not null,
whse_prod_pvt_uuid uuid not null,
quantity numeric(16,6) not null
);
1条答案
按热度按时间z8dt9xmd1#
像这样解决:
它将在一个具体化的观点。如果有任何人有任何优化建议,请随时评论或张贴一个答案。