简体   繁体   English

合并 MySql 中的两行

[英]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 item_id bill_type账单类型 stock_id stock_id stock_name股票名称 product_id product_id trade_name商品名
200 200 0 0 43 43 1 1 1 1 s1 s1 1 1 p1 p1
0 0 150 150 59 59 2 2 1 1 s1 s1 1 1 p1 p1
200 200 0 0 18 18 1 1 2 2 s2 s2 2 2 p2 p2
0 0 150 150 90 90 2 2 2 2 s2 s2 2 2 p2 p2
650 650 0 0 18 18 1 1 2 2 s2 s2 3 3 p3 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_id stock_name股票名称 product_id product_id trade_name商品名
200 200 150 150 1 1 s1 s1 1 1 p1 p1
200 200 150 150 2 2 s2 s2 2 2 p2 p2
650 650 0 0 1 1 s2 s2 3 3 p3 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM