当第一列为某行时为空白时比较3列

时间:2017-02-14 07:44:12

标签: sql sql-server sql-server-2008

I have a table test with 3 column A,B and C

A           B            C      
------------------------------
David       Dav         David       
Bill        Bill        Bill        
            Cathy       Cathy       
Rose        Ros         Ros 
            Mike        Mik     

  **Expected output**

  A         B           C       
  ----------------------------
  Rose      Ros         Ros     
            Mike        Mik     

这里的逻辑是当A不为空时,A与C的比较B否则与C

进行比较

到目前为止我尝试了什么

  select * from test
  where a <> c
  or b <> c

但它没有给我正确的输出,任何人都可以解释我做错了什么。

3 个答案:

答案 0 :(得分:1)

使用ISNULL

select * from test
where isnull(nullif(a,''),b) <> c

答案 1 :(得分:0)

您没有检查A是否为空并且使其成为查询选择的条件,为什么不简单地添加条件:!isnull(a)

select * from test
  where 
  !isnull(a)
  and (a <> c or b <> c)

答案 2 :(得分:0)

我的建议使用CASELEN()

DECLARE @Dummy TABLE(A VARCHAR(100),B VARCHAR(100),C VARCHAR(100));
INSERT INTO @Dummy VALUES      
 ('David','Dav','David')       
,('Bill','Bill','Bill')
,('','Cathy','Cathy')       
,('Rose','Ros','Ros') 
,('','Mike','Mik');

SELECT * 
FROM @Dummy 
WHERE CASE WHEN LEN(A)>0 THEN A ELSE B END <> C

提示

LEN()的最大优势在于其处理NULL和空白的固有能力。当值为LEN时,0返回NULL,当值为空字符串时,即使值包含一个或多个空格,也会返回。{/ p>