2014-07-24 3 views
1

두 테이블 사이의 값 발생 횟수에 차이가 있다면 두 가지 테이블을 강조하고 싶습니다. 따라서 본질적으로 표 1은 열 중 하나에 단어 "공"이있는 4 개의 행을 포함 할 수 있고 표 2는 열 중 하나에 공이라는 단어가 포함 된 4 개의 행을 포함 할 수 있습니다. 이것은 무시됩니다. 하지만 단어 공은 표 1에서 4 인스턴스를, 표 2에서는 6을 출력했습니다. 출력은 다음과 같습니다.은 두 테이블의 값 개수를 비교합니다.

"Column Name" "Table 1" "Table 2" 
    Ball    4   6 

어떻게 수행 할 수 있습니까?

+0

MS SQL 2008 –

답변

3
;WITH CTE1 AS 
(
    SELECT ColName 
      COUNT(ColName) AS NameCount 
    FROM Table1 
    GROUP BY ColName 
),CTE2 AS 
(
    SELECT ColName 
      COUNT(ColName) AS NameCount 
    FROM Table2 
    GROUP BY ColName 
) 
SELECT * 
FROM CTE1 C1 
     FULL OUTER JOIN CTE2 C2 
     ON C1.ColName = C2.ColName 
WHERE C1.NameCount <> C2.NameCount 
+0

"볼"이라는 단어가 칼럼에서 유일한 단어가 아니라는 인상을 받았습니다. @Liam, 이것을 명확히 할 수 있습니까? – paqogomez

+1

이것은 '볼'에만 적용되지 않습니다. 두 테이블의 열의 각 항목에 대해 개수를 만듭니다. 그런 다음 열 이름 (공이있는 볼, 라켓이있는 라켓 등 ...)을 사용하여 이들을 합칩니다. 개수가 다른 경우에는 표시합니다. –

+0

또한'FULL OUTER JOIN'은 두 테이블 모두에서 고아가 된 행을 얻을 수 있도록합니다. –

1

이 대안은 값이 한 테이블에 있지만 다른 테이블에없는 경우를 올바르게 처리합니다. 실행 계획은 jyparask의 답변과 같은 CTE 버전의 실행 계획과 유사합니다.

SELECT 
    COALESCE(t1.ColumnName, t2.ColumnName) AS [Column Name], 
    COALESCE(t1.Occurrences, 0) AS [Table 1], 
    COALESCE(t2.Occurrences, 0) AS [Table 2] 
FROM (
    SELECT 
     ColumnName, 
     COUNT(ColumnName) AS Occurrences 
    FROM 
     Table1 
    GROUP BY 
     ColumnName 
) t1 
FULL OUTER JOIN (
    SELECT 
     ColumnName, 
     COUNT(ColumnName) AS Occurrences 
    FROM 
     Table2 
    GROUP BY 
     ColumnName 
) t2 
ON 
    t1.ColumnName = t2.ColumnName 
WHERE 
    COALESCE(t1.Occurrences, 0) <> COALESCE(t2.Occurrences, 0) 
관련 문제