2017-11-11 2 views
0

SQL Server의 테이블에 id, name1, desc1, name2, desc2 열이 있습니다. name1, name2 값과 desc1, desc2 값을 비교하여 '비고'열에 결과를 표시하고 싶습니다.SQL Server의 여러 열 사이의 데이터 비교

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

비교하는 테이블이 같은 여러 열이있는 것처럼이

id | name1 | desc1 | name2 | desc2 

출력과 같은

뭔가해야합니다.

누군가 나를 도울 수 있습니까? 미리 감사드립니다.

답변

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을했습니다 : 값이 null 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 

경우 구체적으로 확인하지 않는 한 비교하지 않습니다. 공백을 없앨 필요가 없습니다. SQL 서버를 통해이를 실행할 기회를 얻지 못했습니다.