2017-11-11 97 views
0

我在SQL Server中有一个表,列id, name1, desc1, name2, desc2。我想比较name1, name2值和desc1, desc2值,并在另一列'备注'中显示结果。比较SQL Server中多列之间的数据

像这样的事情

id | name1 | desc1 | name2 | desc2 

输出应该像

id | name1 | Desc1 | name2 | desc2 | Remarks 
---+-------+-------+-------+-------+-------------------------- 
1 | abc | test1 | xyz | test2 | Desc and name different 
2 | def | test3 | ghi | test3 | Name different 

有多个列这样的表进行比较。

有人可以帮我吗?提前致谢。

回答

0

你可以试试。

SELECT 
    name1 
    ,Desc1 
    ,name2 
    ,Desc2 
    ,(CASE WHEN name1<>name2 THEN 'Name different' 
      WHEN Desc1<>Desc2 THEN 'Desc different' 
      WHEN name1<>name2 AND Desc1<>Desc2 THEN 'Name and Desc different' 
    END) 
FROM tbl 
+0

每次都返回“名称不同” –

0

最好的办法是创建一个用户定义的函数,它可以做的,你需要检查并能返回正确的字段之间的差异的评价“备注”字符串。我设置一个SQLFiddle作为演示:http://sqlfiddle.com/#!6/aa2cc65/2

0
SELECT name1 ,Desc1 ,name2 ,Desc2 , 
(CASE 
WHEN (name1<>name2) and (Desc1<>Desc2) THEN 'Name and Desc different' 
WHEN name1<>name2 THEN 'Name different' 
WHEN Desc1<>Desc2 THEN 'Desc different' 
WHEN (name1=name2) and (Desc1=Desc2) THEN 'Name and Desc Same' 
END) as Remarks 
FROM tbl 
0
SELECT id, name1, desc1, name2, desc2, 
     (CASE WHEN (ISNULL(name1, '') <> ISNULL(name2, '')) AND (ISNULL(desc1, '') <> ISNULL(desc2, '')) THEN 'Desc and name different' 
        WHEN (ISNULL(name1, '') = ISNULL(name2, '')) AND (ISNULL(desc1, '') <> ISNULL(desc2, '')) THEN 'Desc different' 
        WHEN (ISNULL(name1, '') <> ISNULL(name2, '')) AND (ISNULL(desc1, '') = ISNULL(desc2, '')) THEN 'Name different' 
        WHEN (ISNULL(name1, '') = ISNULL(name2, '')) AND (ISNULL(desc1, '') = ISNULL(desc2, '')) THEN 'Not different' 
     END) as Remarks 
FROM tbl 
0
select id, name1, Desc1, name2, desc2, 
    CASE WHEN trim(ISNULL(name1, 'NULL')) <> trim(ISNULL(name2, 'NULL')) AND 
      trim(ISNULL(desc1, 'NULL')) <> trim(ISNULL(desc2, 'NULL')) 
     THEN 'name and desc different' 

     WHEN trim(ISNULL(name1, 'NULL')) <> trim(ISNULL(name2, 'NULL')) 
     THEN 'name different' 

     WHEN trim(ISNULL(desc1, 'NULL')) <> trim(ISNULL(desc2, 'NULL')) 
     THEN 'desc different' END as Remarks 
from yourtable 

如果值为null,则不会比较,除非你专门检查。 您可能不需要修剪空格。 我没有机会通过sql server运行这个。