我在加入3张桌子时遇到问题(排序)。我有一个包含colums的表inv:invdate,invname,invqty,invaction。行动类型为:添加,保留,打捞
table data:
invdate, invname, invqty, invaction
3/1/2015 pizza 10 add
3/1/2015 bread 10 add
3/1/2015 soda 10 add
3/1/2015 pasta 10 add
3/1/2015 pizza 1 remain
3/1/2015 bread 1 remain
3/1/2015 soda 1 remain
3/1/2015 pasta 1 remain
3/1/2015 pasta 1 salvage
当前查询:
select a.invdate, a.invname, sum(a.invqty), sum(b.invqty), sum(c.invqty)
from inv a
join inv b on a.invdate = b.invdate and a.invname = b.invname
join inv c on b.invdate = c.invdate and b.invname = c.invname
wanted result:
invdate, invname, added, remain, salavge
3/1/2015 pizza 10 1
3/1/2015 bread 10 1
3/1/2015 soda 10 1
3/1/2015 pasta 10 1 1
结果:我只吃意大利面,但没有其他意大利面。我试图让所有的线条显示而不仅仅是面食。我也尝试过左外连接并且是相同的。当我尝试加入2个表时,它工作正常,但不是3个或更多。 我错过了什么?有人可以解释一下吗?谢谢。
答案 0 :(得分:0)
我的猜测是你想要每天加上,保留和打捞金额。 (这似乎是在这种类型的数据上运行的明显查询。)如果是这样,你可以使用条件聚合做你想做的事情:
select invdate, invname,
sum(case when invaction = 'add' then invqty else 0 end) as add,
sum(case when invaction = 'remain' then invqty else 0 end) as remain,
sum(case when invaction = 'salvage' then invqty else 0 end) as salvage
from inv
group by invdate, invname;
您也可以使用pivot
和其他机制。