我有3张桌子.表A有两个字段代码和项目.表B有3个字段代码,qty_recd和recd_dt.表C有3个字段Code,qty_sold,sold_dt.我希望以这种方式获得结果:
对于表A中的每个记录,表B中的qty_recd和表C中qty_sold之和的总和.
TABLE-A
code Item
----- ------
A1 AMMONIA SOLUTION
TABLE-B
code qty_recd recd_dt
----- -------- -------
A1 5 2013-06-01
A1 8 2013-04-18
A1 3 2013-05-22
TABLE-C
code qty_sold sold_dt
----- -------- -------
A1 1 2013-08-10
A1 4 2013-09-01
A1 2 2013-05-11
Run Code Online (Sandbox Code Playgroud)
我想要这样的结果
code item tot_recd tot_sold
----- -------- ------- --------
A1 AMMONIA SOLUTION 16 6
Run Code Online (Sandbox Code Playgroud)
我尝试了几种结构,但没有获得所需的输出.请帮忙构造SELECT语句
您想将主产品列表加入两个摘要.(不要经常在表名中使用连字符!)
其中一个摘要是:
SELECT code, SUM(qty_recd) AS qty_recd
FROM `TABLE-B`
GROUP BY code
Run Code Online (Sandbox Code Playgroud)
你可以猜到另一个.
你的整体查询应该是
SELECT a.code, a.item, b.qty_recd, c.qty_sold
FROM `TABLE-A` AS a
LEFT JOIN (
SELECT code, SUM(qty_recd) AS qty_recd
FROM `TABLE-B`
GROUP BY code
) AS b ON a.code = b.code
LEFT JOIN (
SELECT code, SUM(qty_sold) AS qty_sold
FROM `TABLE-C`
GROUP BY code
) AS c ON a.code = c.code
Run Code Online (Sandbox Code Playgroud)
这是一个显示它的SQL小提琴. http://sqlfiddle.com/#!2/f6cb7/1/0
您可能会天真地只加入所有三个表,然后使用GROUP BY.但是,你将总结这个令人讨厌的跨产品派生表:
CODE qty_recd qty_sold
A1 5 1
A1 5 4
A1 5 2
A1 8 1
A1 8 4
A1 8 2
A1 3 1
A1 3 4
A1 3 2
Run Code Online (Sandbox Code Playgroud)
例如,这个不正确的查询会这样做.
SELECT a.code, a.item, SUM(b.qty_recd), SUM(c.qty_sold) //WRONG!
FROM `TABLE-A` AS a
LEFT JOIN `TABLE-B` AS b ON a.code = b.code
LEFT JOIN `TABLE-C` AS C ON a.code = c.code
GROUP BY a.code, a.item
Run Code Online (Sandbox Code Playgroud)
看到这个小提琴. http://sqlfiddle.com/#!2/f6cb7/3/0
那不是你想要的.因此需要汇总子查询.