2017-11-11 102 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運行這個。