Vous pouvez créer une fonction comme celui-ci, qui prend en charge>,> =, <, < = et = opérateurs:
CREATE FUNCTION func_Generic_Compare
(
@Param1 float,
@Param2 float,
@operator varchar(2)
)
RETURNS nvarchar(5)
AS
BEGIN
if @operator = '>' or @operator = '>='
if @Param1 > @Param2
return 'True'
if @operator = '<' or @operator = '<='
if @Param1 < @Param2
return 'True'
if @operator = '=' or @operator = '<=' or @operator = '>='
if @Param1 = @Param2
return 'True'
RETURN 'False'
END
Et puis utilisez select dbo.func_Generic_Compare (col1,col2,operator) as Result from table
En utilisant une fonction comme celui-ci aura un impact sérieux sur les performances (il est traité 'row by agonizing row'!) mais sera parfait pour les jeux de données de petite taille.
Une autre option serait une instruction case imbriquée. pour plus de clarté, vous pouvez le faire en deux étapes
Select col1, col2, operator,
case when operator='>' then
greater
else
case when operator='<' then
less
else
equal
end
end as result
from
(Select
col1,
col2,
operator,
col1>col2 as greater,
col1<col2 as less,
col1=col2 as equal
from
compare) as PreCalculated
SQLFiddle
Une autre option serait
Select Col1, Col2, Col1>Col2 as Results
from Table
where operator = '>'
union all
Select Col1, Col2, Col1<Col2
from Table
where operator = '<'
union all
Select Col1, Col2, Col1<Col2
from Table
where operator = '='
je dois effectuer cette comparaison de l'opérateur sur les deux colonnes comme, cas lorsque col1 + opérateur + col2 alors 'True' sinon 'False' end, donc si la condition vérifie, mon résultat sera vrai, sinon faux .. J'ai beaucoup de colonnes, j'ai besoin d'un code générique .. – HappieFeet
"J'aime ... quoi? col1 et col2 utilisant l'opérateur "-> oui – HappieFeet
Votre code fonctionne .. Mais j'ai hav e 12 ensembles de telles colonnes .. Son fastidieux à écrire la même chose pour 12 ensembles .. laissez-moi voir comment puis-je faire ce générique à tous .. – HappieFeet