在SQL Server 2008中使用CASE语句在SELECT语句中使用操作符

4
我创建了一个用于比较男性和女性并替换某些值的选择语句。我有两个表格。 表格1: - 男性 (True 或 false) - 女性 (True 或 false) 表格2: - 性别 - 值 ('M','F','B')
我想从表格2创建一个选择语句到表格1。我的查询如下:
select 'insert into table1(Male,female)values('+
   Isnull(cast(case  Gender when  'M' or 'B' Then '''True''' else '''false''' end as varchar),'NULL')+','+
   Isnull(cast(case  Gender when 'F' or'B' Then '''True''' else '''false''' End as varchar),'NUll')+')'
   from Table2

但是在这里使用或运算符时出现了错误。如何使用运算符选择两个值。有人能给我建议吗...

3个回答

2
你可以尝试这样做:
select 'insert into table1(Male,female)values('+
   Isnull(cast(case when Gender = 'M' or Gender = 'B' Then '''True''' else '''false''' end as varchar),'NULL')+','+
   Isnull(cast(case when Gender = 'F' OR Gender = 'B' Then '''True''' else '''false''' End as varchar),'NUll')+')'
   from Table2

或者像这样:

select 'insert into table1(Male,female)values('+
   Isnull(cast(case Gender when 'M' Then '''True''' when 'B' Then '''True''' else '''false''' end as varchar),'NULL')+','+
   Isnull(cast(case Gender when 'F' Then '''True''' when 'B' Then '''True''' else '''false''' End as varchar),'NUll')+')'
   from Table2

2

使用动态SQL需要声明一个变量。此外,它还将帮助您进行代码测试。

DECLARE @dml nvarchar(max) = N''
select @dml += 'insert into table1(Male,female)values('+
   Isnull(cast(case when Gender IN('M', 'B') 
                    Then '''True''' else '''false''' 
               end as varchar),'NULL')+','+
   Isnull(cast(case when Gender IN('F', 'B') 
                    Then '''True''' else '''false''' 
               end as varchar),'NUll')+')' + CHAR(13) + CHAR(10)
from Table2
PRINT @dml

1
select 'insert into table1(Male,female)values('+
   Isnull(cast(case  Gender when  'M' or Gender when 'B' Then '''True''' else '''false''' end as varchar),'NULL')+','+
   Isnull(cast(case  Gender when 'F' or Gender when 'B' Then '''True''' else '''false''' End as varchar),'NUll')+')'
   from Table2

尝试这个查询。希望有帮助。

我学到了,“或”运算符只有在使用“等于”运算符时才会使用。 - Duk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接