2012-02-08 54 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