我需要在SQL查询的where子句中包含一个列名,具体取决于变量值。 例如, 1.如果我有一个变量,比如 @test ,我将变量赋值为1/0。 2.我有一张表,比如 table1 ,其中包含2个列名 col1,col2 。
现在,我正在编写一个查询来从表中获取一些数据,一次只包含一列,取决于 @test 变量(先前声明),即我需要包含如果 @test 为1则在查询的where子句中为col1 ,如果 @test 为0,则为 col2 。
请尽快告诉我解决方案。
提前致谢
答案 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。