2010-01-11 6 views
0

Considérez tablesCréation de requête SQL pour le cas suivant

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 a une plus grande préférence si MG1 et compte> = 1 alors il est donné comme titre MG1, pour d'autres le titre correspondant est utilisé et pour le comptage> 1 deux ou plus

+0

Qu'avez-vous à ce jour? – womp

+0

Pourquoi produisez-vous 'MG2' pour l'id' 2'? Il a 'count> 1' et n'est pas' MG1'. – Quassnoi

+0

@Quassnoi id 2 comptez 1 –

Répondre

1

Je pense que c'est ce que vous allez pour:

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 
Questions connexes