2010-01-11 57 views
0

考慮表設計SQL查詢用於以下情況

Table1 
id, name 
1 xyz 
2 abc 
3 pqr 

Table2 
id title 
1 Mg1 
2 Mg2 
3 SG1 

Table3 
Tb1_id tb2_id count 
1   1  3 
1   2  3 
1   3  4 
2   2  1 
3   2  2 
3   3  2 


I want to do query to give result like 
id  title 
1  MG1 
2  MG2 
3  Two or More Title 

MG1具有更高的優先級,如果MG1和計數> = 1,則它被給定爲MG1的標題,對應標題他人使用和用於計數> 1作爲兩個以上

+0

你有什麼這麼遠嗎? – womp 2010-01-11 17:24:09

+0

爲什麼你輸出id爲2的'MG2'?它有'count> 1'而不是'MG1'。 – Quassnoi 2010-01-11 17:24:42

+0

@Quassnoi id 2已計數1 – 2010-01-11 17:27:45

回答

1

我覺得這是你要的東西:

select t3.Tb1_id as id, 
    case 
     when mg1cnt.count >= 1 then 'MG1' 
     when cnt.count = 1 then upper(t2.title) 
     else 'Two or More Titles' 
    end as title 
from (
    select Tb1_id, count(*) as count 
    from Table3 
    group by Tb1_id 
) cnt 
inner join (
    select Tb1_id, isnull(SUM(case when t2.title='mg1' then 1 end), 0) as count 
    from Table3 t3 
    inner join Table2 t2 on t3.tb2_id = t2.id 
    group by Tb1_id 
) as mg1cnt on cnt.Tb1_id = mg1cnt.Tb1_id 
inner join Table3 t3 on cnt.Tb1_id = t3.Tb1_id 
inner join Table2 t2 on t3.tb2_id = t2.id 
group by t3.Tb1_id, 
    case 
     when mg1cnt.count >= 1 then 'MG1' 
     when cnt.count = 1 then upper(t2.title) 
     else 'Two or More Titles' 
    end