2011-08-18 7 views
3

Comment procéder pour obtenir une valeur d'une colonne dans une table et la comparer à une colonne d'une autre table et renvoyer la plus grande des deux dans une même requête?comparaison de deux valeurs int dans tsql

J'ai deux requêtes différentes pour obtenir ces valeurs, je ne sais pas comment comparer:

select level from cmh where user = 'blah' 
select level from cons where user = 'blah' 

J'ai besoin de comparer les deux niveaux au-dessus et obtenir le plus grand des deux.

grâce

Répondre

2

Quelque chose comme (du haut de ma tête)

select 
case when cmh.level > cons.level 
then cmh.level 
else cons.level 
end 
from cmh inner join cons on cmh.[user] = cons.[user] 
where cons.[user] = 'blah' 
0

Vous pouvez utiliser UNION pour joindre les deux requêtes, puis utilisez MAX() pour obtenir la plus grande des niveaux.

select max(level) as level 
from (
    select level from cmh where user = 'blah' 
    union all 
    select level from cons where user = 'blah' 
    ) as result 
0

Si les tables ne sont pas rattachables (ou si vous comparring deux utilisateurs différents, etc.), d'une façon que vous pouvez le faire:

Declare @var1 as int 
Declare @var2 as int 

SET @var1 = (select level from cmh where user = 'blah') 
SET @var2 = (select level from cons where user = 'blah') 

SELECT 
CASE WHEN isnull(@var1,0) >= isnull(@var2,0) THEN @var1 ELSE @var2 END 

Sinon, vous pouvez relier les tables à récupérer un ensemble de données complet comme ceci:

SELECT 
    CASE WHEN isnull(T1.level,0) >= isnull(T2.level,0) THEN @var1 ELSE @var2 END as [greatest] 
FROM 
    cmh T1 LEFT JOIN cons T2 
    ON T1.user = T2.user 
WHERE T1.user = 'blah' 
Questions connexes