2010-09-20 4 views
0

Je dois inclure un nom de colonne dans la clause where de la requête SQL en fonction d'une valeur de variable. Par exemple, 1. Si j'ai une variable, disons @test et que j'ai affecté la variable avec la valeur 1/0. 2. J'ai une table, par exemple, table1 avec 2 noms de colonnes col1, col2.comment inclure le nom de la colonne dans l'instruction case

Maintenant, je suis en train d'écrire une requête pour récupérer des données de la table en incluant une seule colonne à la fois dépend de la @test variables (déclarée précédemment), à savoir que je dois inclure col1 dans la clause where de la requête si le @test est 1 et col2 si @test est 0.

S'il vous plaît laissez-moi savoir la solution dès que possible.

Merci à l'avance

Répondre

0
declare @tbl table 
(
    col1 int, 
    col2 int 

) 

insert into @tbl select 10, 20 

declare @test int 

set @test = 1 

select * 
from @tbl 
Where Case When @test = 1 Then Col1 Else Col2 End = 10 

Si datatype est différent

select * 
from @tbl 
Where Case when @test = 1 Then Col1 end = 10 
     OR 
     Case when @test = 2 Then Col2 end = 'sometext' 
4
Select * 
From dbo.MyTable 
Where Case When @Test = 1 Then Col1 Else Col2 End > 100 
+0

Les deux colonnes ont des types de données différents. Alors comment faire ?? – ASD

0

Une approche légèrement différente:

Select * 
From dbo.MyTable 
Where Col1 = Case When @Test = 1 Then 10 Else Col1 End and 
     Col2 = Case When @Test = 0 Then 'sometext' Else Col2 End 

Cette version de la requête peut être sargable.

Questions connexes