当连接3个表数据缺少SQL时

时间:2015-03-01 12:47:16

标签: sql

我在加入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个或更多。 我错过了什么?有人可以解释一下吗?谢谢。

1 个答案:

答案 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和其他机制。