如何在case语句中包含列名

时间:2010-09-20 08:48:07

标签: sql case

我需要在SQL查询的where子句中包含一个列名,具体取决于变量值。 例如, 1.如果我有一个变量,比如 @test ,我将变量赋值为1/0。 2.我有一张表,比如 table1 ,其中包含2个列名 col1,col2

现在,我正在编写一个查询来从表中获取一些数据,一次只包含一列,取决于 @test 变量(先前声明),即我需要包含如果 @test 为1则在查询的where子句中为col1 ,如果 @test 为0,则为 col2

请尽快告诉我解决方案。

提前致谢

3 个答案:

答案 0 :(得分:4)

Select *
From dbo.MyTable
Where Case When @Test = 1 Then Col1 Else Col2 End  > 100

答案 1 :(得分: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

如果数据类型不同

select *
from @tbl
Where Case when @test = 1 Then Col1 end = 10
        OR
      Case when @test = 2 Then Col2 end = 'sometext'

答案 2 :(得分:0)

略有不同的方法:

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 

此版本的查询可能sargable