[英]Merge two row in MySql
i have this query我有这个查询
SELECT
CASE
WHEN bill_type = 1 THEN
(
SELECT SUM(product_qty) FROM items
JOIN bills ON items.bill_id = bills.bill_id
WHERE items.bill_id = i.bill_id AND items.product_id = i.product_id AND bills.bill_type = 1
LIMIT 1
)
ELSE 0
END AS input_qty,
CASE
WHEN bill_type = 2 THEN
(
SELECT SUM(product_qty) FROM items
JOIN bills ON items.bill_id = bills.bill_id
WHERE items.bill_id = i.bill_id AND items.product_id = i.product_id AND bills.bill_type = 2
LIMIT 1
)
ELSE 0
END AS output_qty,
stock_name,
i.product_id,
trade_name,
bill_type,
i.bill_id
FROM items i
JOIN bills b
ON i.bill_id = b.bill_id
JOIN products
ON i.product_id = products.product_id
JOIN stocks
ON b.stock_id = stocks.stock_id
GROUP BY i.product_id, b.stock_id, bill_type
and this is my output这是我的 output
input_qty![]() |
output_qty![]() |
item_id ![]() |
bill_type![]() |
stock_id ![]() |
stock_name![]() |
product_id ![]() |
trade_name![]() |
---|---|---|---|---|---|---|---|
200 ![]() |
0 ![]() |
43 ![]() |
1 ![]() |
1 ![]() |
s1 ![]() |
1 ![]() |
p1 ![]() |
0 ![]() |
150 ![]() |
59 ![]() |
2 ![]() |
1 ![]() |
s1 ![]() |
1 ![]() |
p1 ![]() |
200 ![]() |
0 ![]() |
18 ![]() |
1 ![]() |
2 ![]() |
s2 ![]() |
2 ![]() |
p2 ![]() |
0 ![]() |
150 ![]() |
90 ![]() |
2 ![]() |
2 ![]() |
s2 ![]() |
2 ![]() |
p2 ![]() |
650 ![]() |
0 ![]() |
18 ![]() |
1 ![]() |
2 ![]() |
s2 ![]() |
3 ![]() |
p3 ![]() |
now how can merge column with same product_id and stock_id to be like this?现在如何将具有相同 product_id 和 stock_id 的列合并为这样?
input_qty![]() |
output_qty![]() |
stock_id ![]() |
stock_name![]() |
product_id ![]() |
trade_name![]() |
---|---|---|---|---|---|
200 ![]() |
150 ![]() |
1 ![]() |
s1 ![]() |
1 ![]() |
p1 ![]() |
200 ![]() |
150 ![]() |
2 ![]() |
s2 ![]() |
2 ![]() |
p2 ![]() |
650 ![]() |
0 ![]() |
1 ![]() |
s2 ![]() |
3 ![]() |
p3 ![]() |
I'm pretty sure you want conditional aggregation:我很确定你想要条件聚合:
SELECT p.product_id, trade_name, b.stock_id, stock_name,
SUM(CASE WHEN bill_type = 1 THEN product_qty ELSE 0 END) as input_qty,
SUM(CASE WHEN bill_type = 2 THEN product_qty ELSE 0 END) as output_qty
FROM items i JOIN
bills b
ON i.bill_id = b.bill_id JOIN
products p
ON i.product_id = p.product_id JOIN
stocks s
ON b.stock_id = s.stock_id
GROUP BY p.product_id, trade_name, b.stock_id, stock_name;
In a query that references multiple tables I strongly, strongly recommend that you qualify all column references.在引用多个表的查询中,我强烈建议您限定所有列引用。
How about removing bill_type from your GROUP BY clause, and SUM the columns you want to aggregate:如何从您的 GROUP BY 子句中删除 bill_type,然后对要聚合的列求和:
SELECT
SUM(
CASE
WHEN bill_type = 1 THEN (SELECT SUM(product_qty) FROM items, bills WHERE items.bill_id = bills.bill_id AND bills.bill_type = 1)
ELSE 0
END) AS input_qty,
SUM(CASE
WHEN bill_type = 2 THEN (SELECT SUM(product_qty) FROM items, bills WHERE items.bill_id = bills.bill_id AND bills.bill_type = 2)
ELSE 0
END) AS output_qty,
item_id,
bill_type,
bills.stock_id,
stock_name,
items.product_id,
trade_name
FROM items
JOIN bills
ON items.bill_id = bills.bill_id
JOIN products
ON items.product_id = products.product_id
JOIN stocks
ON bills.stock_id = stocks.stock_id
GROUP BY items.product_id, bills.stock_id
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.