日期:2014-05-18  浏览次数:20594 次

求一条查询语句!
有表字段F1,F2,F3,F4,F5,F6,字段的值为单个字母A,B,C,
例如
ID F1 F2 F3 F4 F5 F6 
1 A A B C B A  
2 B A B C A C  
3 C B B A B C  
4 B B C A A B  
…  

查询要求F1,F3,F4,F6的值分别为A,B,BC,A,只要对1-3个值就查询出来(F4为B或者C都是满足要求)
查询结果(其中第一行四个都符合,没有查询出来,第四行一个都不对,没有查询出来
第二行对两个,第三行对1个,都符合要求)
ID F1 F2 F3 F4 F5 F6 
2 B A B C A C  
3 C B B A B C  
…  
如何实现上面的查询语句!


------解决方案--------------------
SQL code
select * from tb where (case when F1='A' then 1 else 0 end)+
                       (case when F3='B' then 1 else 0 end)+
                       (case when F4 in ('A','B') then 1 else 0 end)+
                       (case when F6='A' then 1 else 0 end) between 1 and 3

------解决方案--------------------
SQL code
use Tempdb
go
--> --> 
 
if not object_id(N'Tempdb..#T') is null
    drop table #T
Go
Create table #T([ID] int,[F1] nvarchar(1),[F2] nvarchar(1),[F3] nvarchar(1),[F4] nvarchar(1),[F5] nvarchar(1),[F6] nvarchar(1))
Insert #T
select 1,N'A',N'A',N'B',N'C',N'B',N'A' union all
select 2,N'B',N'A',N'B',N'C',N'A',N'C' union all
select 3,N'C',N'B',N'B',N'A',N'B',N'C' union all
select 4,N'B',N'B',N'C',N'A',N'A',N'B'
Go
Select * 
from #T AS a
WHERE (F1='A' OR F3='B' OR F4 IN('B','C') OR f6 IN('A'))
AND NOT (F1='A' AND  F3='B' and F4 IN('B','C') AND  f6 IN('A'))

/*
ID    F1    F2    F3    F4    F5    F6
2    B    A    B    C    A    C
3    C    B    B    A    B    C
*/