none
SQLSERVER2008筛选出当某列为指定数据时,其他若干列相等的数据 RRS feed

  • 问题

  • Create table T
    (
    	id INT primary key identity(1,1),
    	A0 varchar(10),
    	A1 varchar(10),
    	A2 varchar(10),
    	b0 varchar(10),
    	b1 varchar(10),
    	b2 varchar(10),	
    	C0 bit default 0,
    	C1 bit DEFAULT 0,
    	C2 bit default 0
    )
    
    insert into T 
    select  '00','01','02','00','00','00',1,0,0 union
    select  '01','01','01','00','00','00',1,0,0 union
    select  '00','01','02','00','01','02',1,1,1 union
    select  '00','01','02','00','00','00',1,1,0 union
    select  '00','01','02','00','00','00',1,0,1 union
    select  '01','01','01','01','00','01',1,0,1 union
    select  '00','01','02','00','00','00',0,1,1 union
    select  '00','01','02','00','01','02',0,1,1
    

    筛选规则:若该列C0=1 C1=0 C2=0,同时A0=B0,那么打印出。
    即只要C0 C1 C2其中任意值为1,同时对应的A=B,那么打印出。
    最终结果应该为:
    '00','01','02','00','00','00',1,0,0  --C0=1  A0=B0
    '00','01','02','00','01','02',1,1,1  --   c1,c2=1 a1=b1 a2=b2
    '01','01','01','01','00','01',1,0,1  -- c1,c3=1 a1=b1 a3=b3
     '00','01','02','00','01','02',0,1,1 -- c2,c3=1 a2=b2,a3=b3
    2014年4月19日 8:47

答案

  • SELECT T.* FROM T
    WHERE 1 IN( C0, C1, C2)
    	AND( C0 = 0 OR C0 = 1 AND A0 = B0 )
    	AND( C1 = 0 OR C1 = 1 AND A1 = B1 )
    	AND( C2 = 0 OR C2 = 1 AND A2 = B2 )
    

    • 已建议为答案 亂馬客 2014年4月21日 5:55
    • 已标记为答案 曲风荷 2014年4月22日 7:13
    2014年4月21日 3:58