2012-02-08 22 views
1

我有以下表格: 资产 - 事情,我们为客户监控 Trouble_tickets - 故障单实例 - 可用于修复故障单的所有部件 trouble_ticket_parts - 使用零件的ticket_id,part_id和qty的桥表。票可以有很多部分,所以它可以有很多part_id。SUM在桥上表值

我的查询如下:

select a.name, tt.id, sum(if(trouble_ticket_parts.id = 44, parts.qty,0)) as `qty` 
    from trouble_tickets tt, trouble_ticket_parts ttp, parts p 
    where tt.id = ttp.ticket_id 
    and ttp.parts_id = p.id 
    and a.id = tt.asset_id 
group by a.name asc; 

我的问题是,如果一个票与1份X和1个Y部,它会显示为2的数量,我只在部分X感兴趣关闭。所以问题是如何在问题清单清单中替换部分x的数量。

回答

1
select a.name, tt.id, sum(if(trouble_ticket_parts.id = 44, parts.qty,0)) as `qty`, p.id as partid 
    from trouble_tickets tt, trouble_ticket_parts ttp, parts p 
    where tt.id = ttp.ticket_id 
    and ttp.parts_id = p.id 
    and a.id = tt.asset_id 
group by 
    a.name asc, p.id 
; 

select a.name, tt.id, sum(if(trouble_ticket_parts.id = 44, parts.qty,0)) as `qty` 
    from trouble_tickets tt, trouble_ticket_parts ttp, parts p 
    where tt.id = ttp.ticket_id 
    and ttp.parts_id = p.id 
    and a.id = tt.asset_id 
    and p.id = <part-id of x> 
group by a.name asc; 
+0

你的第一个查询是相同的东西,我与添加部件ID到组由外做。所以它不会改善我的结果。我不明白这一点:“和p.id = <部分id>第二个查询的一部分,你能解释一下吗? – CodeMonkey 2012-02-09 18:46:03

+0

将part-id添加到group by语句将输出每个零件的总和,而不是所有零件的总和 - 因此,使用1部分x和1部分您会得到2条线,其中一条使用x和1部分,另一部分使用部分y和一块。第二个查询是,如果只需要x部分的数字:而不是x的部分id放入x的part-id中,并且只会得到一行,而x(1 ) – 2012-02-10 01:52:48

+0

我有另一个版本的查询,我正在做你在第二个查询中提到的。我仍然得到相同的结果。由于ticket_id在桥表中有两次,因此它们都计数在两个表中。 – CodeMonkey 2012-02-10 19:43:57