복붙노트

[SQL] 어떻게 SQL Server의 평등을위한 두 개의 열을 비교합니까?

SQL

어떻게 SQL Server의 평등을위한 두 개의 열을 비교합니까?

나는 특정 기준에 함께 결합 된 두 개의 열을 가지고,하지만 난 다른 두 열이 동일한 경우에도 확인하는 것처럼 그들이 경우 다음 비트 필드를 반환합니다.

CASE WHEN를 사용하는 것보다 간단한 해결책이 있습니까?

이상적으로 난 그냥 사용할 수 있습니다 :

    SELECT Column1 = Column2 AS MyDesiredResult
      FROM Table1
INNER JOIN Table2 ON Table1.PrimaryKey = Table2.ForeignKey

해결법

  1. ==============================

    1.이것에 대한 CASE 문제는 무엇입니까? 결과를 확인하기 위해, 당신은 적어도 바이트가 필요합니다, 그리고 당신이 하나의 문자로 무엇을 얻을.

    이것에 대한 CASE 문제는 무엇입니까? 결과를 확인하기 위해, 당신은 적어도 바이트가 필요합니다, 그리고 당신이 하나의 문자로 무엇을 얻을.

    CASE WHEN COLUMN1 = COLUMN2 THEN '1' ELSE '0' END AS MyDesiredResult
    

    잘 작동하고, 모든 의도와 목적을 위해 비트 필드를 사용하는 것과 같은 일을 수행한다.

  2. ==============================

    2.

    SELECT 
      CASE WHEN COLUMN1 = COLUMN2 
        THEN '1' 
        ELSE '0' 
      END 
      AS MyDesiredResult
    FROM Table1
    INNER JOIN Table2 ON Table1.PrimaryKey = Table2.ForeignKey
    
  3. ==============================

    3.나는 언제 또한 CASE와 함께 갈 것입니다.

    나는 언제 또한 CASE와 함께 갈 것입니다.

    외부를 사용하는 것과 같이 가입 또는 무엇 이건,하지만 당신이이 경우에 필요한 될 것 같지 않습니다,하지만 당신이 실제로 수행하려는 작업에 따라 다른 옵션이있을 수 있습니다.

  4. ==============================

    4.CASE 회피 용액 WHEN 유착을 사용하는 것이다.

    CASE 회피 용액 WHEN 유착을 사용하는 것이다.

    SELECT
        t1.Col2 AS t1Col2,
        t2.Col2 AS t2Col2,
        COALESCE(NULLIF(t1.Col2, t2.Col2),NULLIF(t2.Col2, t1.Col2)) as NULL_IF_SAME
     FROM @t1 AS t1
    JOIN @t2 AS t2 ON t1.ColID = t2.ColID
    

    NULL_IF_SAME 열은 t1.col2 = t2.col2 (NULL 포함) 모든 행에 대해 NULL을 줄 것이다. 이 CASE보다 더 많은 읽을 수없는 있지만, 그것은 ANSI SQL 표현됩니다.

    그냥 재미를 위해 하나가 (그렇지, 매우 읽기 때문에 권장하지 않습니다하지만) 0과 1의 부울 비트 값을하고자하는 경우, 하나는 (모든 데이터 유형에 대한 어떤 작품)를 사용할 수 있습니다 :

    1/ISNULL(LEN(COALESCE(NULLIF(t1.Col2, t2.Col2),NULLIF(t2.Col2, t1.Col2)))+2,1) as BOOL_BIT_SAME.
    

    이제 당신은 문제가 될 수있는 첫 번째 문자열에 LEN 함수 변환 위, 그래서 대신이 일을해야에, 비트 숫자 데이터 유형 중 하나를 가지고 원하는 경우 :

    1/(CAST(ISNULL(ABS(COALESCE(NULLIF(t1.Col2, t2.Col2),NULLIF(t2.Col2, t1.Col2)))+1,0)as bit)+1) as FAST_BOOL_BIT_SAME_NUMERIC
    

    위는 CAST없이 정수에 대한 작동합니다.

    참고 : 또한 SQLServer에 2012 년, 우리는 IIF 기능을 가지고있다.

  5. ==============================

    5.데이비드 엘리 손도의 대답에 대해서는, 이것은 잘못된 반응을 제공 할 수 있습니다. 또한 값이 일치하지 않는 제로를 제공하지 않습니다.

    데이비드 엘리 손도의 대답에 대해서는, 이것은 잘못된 반응을 제공 할 수 있습니다. 또한 값이 일치하지 않는 제로를 제공하지 않습니다.

    DECLARE @t1 TABLE (
        ColID   int     IDENTITY,
        Col2    int
    )
    
    DECLARE @t2 TABLE (
        ColID   int     IDENTITY,
        Col2    int
    )
    
    INSERT INTO @t1 (Col2) VALUES (123)
    INSERT INTO @t1 (Col2) VALUES (234)
    INSERT INTO @t1 (Col2) VALUES (456)
    INSERT INTO @t1 (Col2) VALUES (1)
    
    INSERT INTO @t2 (Col2) VALUES (123)
    INSERT INTO @t2 (Col2) VALUES (345)
    INSERT INTO @t2 (Col2) VALUES (456)
    INSERT INTO @t2 (Col2) VALUES (2)
    
    SELECT
        t1.Col2 AS t1Col2,
        t2.Col2 AS t2Col2,
        ISNULL(NULLIF(t1.Col2, t2.Col2), 1) AS MyDesiredResult
    FROM @t1 AS t1
    JOIN @t2 AS t2 ON t1.ColID = t2.ColID
    
         t1Col2      t2Col2 MyDesiredResult
    ----------- ----------- ---------------
            123         123               1
            234         345             234 <- Not a zero
            456         456               1
              1           2               1 <- Not a match
    
  6. ==============================

    6.IIF의 사용? 그리고 SQL 서버의 버전에 따라 다릅니다.

    IIF의 사용? 그리고 SQL 서버의 버전에 따라 다릅니다.

    SELECT
    IIF(Column1 = Column2, 1, 0) AS MyDesiredResult
    FROM Table;
    
  7. ==============================

    7.내가 생각할 수있는 가장 가까운 접근 방식은 NULLIF입니다 :

    내가 생각할 수있는 가장 가까운 접근 방식은 NULLIF입니다 :

    SELECT 
        ISNULL(NULLIF(O.ShipName, C.CompanyName), 1),
        O.ShipName,      
        C.CompanyName,
        O.OrderId
    FROM [Northwind].[dbo].[Orders] O
    INNER JOIN [Northwind].[dbo].[Customers] C
    ON C.CustomerId = O.CustomerId
    
    GO
    

    두 표현이 동일하지 않은 경우 NULLIF는 첫 번째 표현식을 반환합니다. 표현이 동일한 경우, NULLIF는 첫 번째 표현식의 유형의 널 (null) 값을 반환합니다.

    그래서, 위의 쿼리는 열, 그렇지 않으면 첫 번째 표현식 동일한하는 기록을 위해 1을 반환합니다.

  8. from https://stackoverflow.com/questions/1632792/how-do-i-compare-two-columns-for-equality-in-sql-server by cc-by-sa and MIT license