34,837
社区成员




create table a(id int,t text,a1 int,a2 int,a3 int)
insert into a values(1,'ta',0,1,9)
insert into a values(2,'tc',4,8,4)
insert into a values(3,'tt',7,3,3)
insert into a values(4,'rt',3,0,3)
insert into a values(5,'gg',7,3,6)
insert into a values(6,'sr',2,5,5)
insert into a values(7,'qq',4,5,9)
insert into a values(8,'sd',5,5,8)
insert into a values(9,'vs',5,0,4)
insert into a values(10,'ws',4,0,8)
insert into a values(11,'rf',9,3,4)
go
select a.* from a
join
(
select id,t,cast(a1 as varchar)+','+cast(a2 as varchar)+','+cast(a3 as varchar) as aa from a
)b
on a.id=b.id
where charindex(',0,',','+b.aa+',')>0 and charindex(',4,',','+b.aa+',')>0
/*
id t a1 a2 a3
----------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ----------- ----------- -----------
9 vs 5 0 4
10 ws 4 0 8
(所影响的行数为 2 行)
*/
create table a(id int,t text,a1 int,a2 int,a3 int)
insert into a values(1,'ta',0,1,9)
insert into a values(2,'tc',4,8,4)
insert into a values(3,'tt',7,3,3)
insert into a values(4,'rt',3,0,3)
insert into a values(5,'gg',7,3,6)
insert into a values(6,'sr',2,5,5)
insert into a values(7,'qq',4,5,9)
insert into a values(8,'sd',5,5,8)
insert into a values(9,'vs',5,0,4)
insert into a values(10,'ws',4,0,8)
insert into a values(11,'rf',9,3,4)
go
select *
from a
where (case when a1=0 then 1 else 0 end +case when a2=0 then 1 else 0 end+case when a3=0 then 1 else 0 end) > 0 and
(case when a1=4 then 1 else 0 end +case when a2=4 then 1 else 0 end+case when a3=4 then 1 else 0 end) > 0
drop table a
/*
id t a1 a2 a3
----------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ----------- ----------- -----------
9 vs 5 0 4
10 ws 4 0 8
(所影响的行数为 2 行)
*/
select * from a where (a1 = 0 and (a2 = 4 or a3 = 4)) or (a2 = 0 and (a1 = 4 or a3 = 4)) or (a3 = 0 and (a1 = 4 or a2 = 4)) or
(a1 = 4 and (a2 = 0 or a3 = 0)) or (a2 = 4 and (a1 = 0 or a3 = 0)) or (a3 = 4 and (a1 = 0 or a2 = 0))
/*
id t a1 a2 a3
----------- ---------- ----------- ----------- -----------
9 vs 5 0 4
10 ws 4 0 8
(所影响的行数为 2 行)
*/
create table a(id int,t text,a1 int,a2 int,a3 int)
insert into a values(1,'ta',0,1,9)
insert into a values(2,'tc',4,8,4)
insert into a values(3,'tt',7,3,3)
insert into a values(4,'rt',3,0,3)
insert into a values(5,'gg',7,3,6)
insert into a values(6,'sr',2,5,5)
insert into a values(7,'qq',4,5,9)
insert into a values(8,'sd',5,5,8)
insert into a values(9,'vs',5,0,4)
insert into a values(10,'ws',4,0,8)
insert into a values(11,'rf',9,3,4)
go
select a.* from a
join
(
select id,t,cast(a1 as varchar)+','+cast(a2 as varchar)+','+cast(a3 as varchar) as aa from a
)b
on a.id=b.id
where charindex(',0,',','+b.aa+',')>0 and charindex(',4,',','+b.aa+',')>0
and charindex(',0,',','+b.aa+',') <> charindex(',4,',','+b.aa+',')
drop table a
/*
id t a1 a2 a3
----------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ----------- ----------- -----------
9 vs 5 0 4
10 ws 4 0 8
(所影响的行数为 2 行)
*/