2010-01-11 64 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