Excel에서 전체 외부 조인을 시뮬레이트하는 방법은 무엇입니까?


34

실제 데이터베이스가 아닌 Excel에 일부 데이터가 있다고 가정 해 봅시다. 한 시트에 하나의 열이 ID로 작동하는 데이터가 있으며이 열의 값이 고유하다는 것을 확인했습니다. 다른 시트에는 ID로 가져올 수있는 하나의 열이있는 데이터가 있으며 고유합니다. 시트 1의 행 N에 값이 있고 시트 2의 행 M에 동일한 값이 있으면 행 N과 행 M이 동일한 실제 객체를 나타내는 것입니다.

내가 묻는 것 : 매크로를 작성하지 않고 어떻게 전체 외부 조인에 해당하는 것을 얻을 수 있습니까? 리본을 통해 액세스 할 수있는 수식과 모든 기능이 정상입니다.

작은 "데이터 재생"예 :

시트 1 :

Dostoyevski    Russia
Pushkin        Russia
Shelley        England
Flaubert       France
Hugo           France
Eichendorff    Germany
Byron          England
Zola           France

시트 2 :

Shelley        Percy Bysshe
Eichendorff    Josef Freiherr Von
Flaubert       Gustave
Byron          Lord
Keller         Gottfried
Dostoyevski    Fyodor
Zola           Emile
Balzac         Honoré de

원하는 출력 (정렬은 중요하지 않음) :

Dostoyevski    Russia   Fyodor
Pushkin        Russia
Shelley        England  Percy Bysshe
Flaubert       France   Gustave
Hugo           France
Eichendorff    Germany  Josef Freiherr von
Byron          England  Lord
Zola           France   Emile
Keller                  Gottfried
Balzac                  Honoré de

이 시나리오에 의해 겁에 질린 모든 사람에게 나는 이것이 잘못된 길임을 알고 있습니다. 선택의 여지가 있다면 Excel을 사용 하지 않을 것 입니다. 그러나 실용적인 솔루션이 필요하고 통계가 좋으며 더 나은 (IT 관점에서) 솔루션을 적용 할 수없는 상황이 충분합니다.


두 목록을 정렬하고 나란히 놓으면 원하는 열을 수동으로 쉽게 일치시킬 수 있습니다. 많은 양 의 데이터 가있는 경우 두 가지 범위를 사용하여이를 수행하는 함수를 작성할 수 있습니다.
Dan

@Dan 내가 말했듯이 함수를 작성하지 않고이 작업 을 수행하고 있습니다 . (내가 VBA를 작성했기 때문에 전에, 적어도 나를 위해) 내가 쓸 수있는 상황에서 해결책은 간단하다
rumtscho

Excel은 데이터 연결을 통한 SQL 쿼리를 지원합니다. 불행히도 더 많은 조언을 제공 할 수는 없지만 조사해 볼 가치가 있습니다.
Kyle

@Kyle 나는 그 옵션을 내 대답에 추가했다. 그것은 희미한 마음을위한 것이 아니며, 이것이 과잉 살인을하거나 완주하는 엉망이 될 수 있습니다.
enderland

답변:


43

손쉬운 접근-표준 Excel 작업

먼저 두 테이블의 두 키 열을 하나의 새 시트로 복사하여 단일 열로 붙여 넣습니다.

"중복 제거"를 사용하여 모든 고유 키의 단일 목록을 가져옵니다.

그런 다음 각 테이블의 각 데이터 열마다 하나씩 두 개의 열 (이 경우)을 추가하십시오. 수식을 훨씬 멋지게 보이게하려면 형식을 테이블 옵션으로 사용하는 것이 좋습니다. vlookup을 사용하여 다음 공식을 사용하십시오.

=IFERROR(VLOOKUP([@ID],Sheet4!A:B,2,FALSE),"")

여기서 Sheet4!A:B각 소스 값에 대한 소스 테이블 데이터 테이블을 나타냅니다. IFERROR는 vlookup이 실패하고이 경우 빈 셀을 반환 할 때 나타나는 못생긴 # N / A 결과를 방지합니다.

결과 테이블이 제공됩니다.


시트 3 :

여기에 이미지 설명을 입력하십시오

시트 4 :

여기에 이미지 설명을 입력하십시오

결과 데이터 :

여기에 이미지 설명을 입력하십시오

결과 수식 ( Ctrl+ ~는 이것을 토글합니다) :

여기에 이미지 설명을 입력하십시오


내장 SQL 쿼리

내장 SQL 쿼리를 사용하여이 작업을 수행 할 수도 있습니다. 사용하기 쉽지는 않지만 더 나은 사용 사례가 될 것입니다. 이를 위해서는 "소스"데이터를 테이블로 형식화해야합니다.

  1. 새 시트에서 셀을 클릭하십시오
  2. 데이터로 이동-> 다른 소스에서-> Microsoft 쿼리에서
  3. 데이터베이스 탭에서 Excel 파일 *을 선택하고 확인을 누르십시오.
  4. 통합 문서를 선택하십시오
  5. 다음 4 개의 필드를 선택하십시오.
    • 여기에 이미지 설명을 입력하십시오
  6. 1990 년대 멋진 형식의 경고에서 "다음"및 "확인"을 클릭하십시오.
  7. 다음은 이 지침은 첫 번째 왼쪽 외부 조인 만듭니다. 제 경우에는 "countries"테이블을 왼쪽 소스로 사용하고 "names"를 오른쪽으로 사용하고 있습니다.
    • 여기에 이미지 설명을 입력하십시오
    • 이것은 당신이 ID에 참여하기 때문에 일부 행만 제공합니다.
  8. "빼기 조인을 만든 다음 합집합으로 추가"부분이 더 복잡합니다.

    • 빼기 조인 구성은 다음과 같습니다. 여기에 이미지 설명을 입력하십시오
    • 이 조인의 SQL을 SQL 버튼에서 복사하십시오.
    • SELECT countries$.ID, countries$.Val1, names$.ID, names$. Val2 {oj에서 C:\Users\Username\Desktop\Book2.xlsx. countries$ countries$왼쪽 외부 가입 C:\Users\Username\Desktop\Book2.xlsx. names$ names$ON countries$.ID = names$.ID} WHERE ( names$.ID는 Null 임)

  9. 작성한 첫 번째 외부 조인으로 돌아갑니다. SQL을 수동으로 편집하고

    • Union바닥에 추가
    • 위의 빼기 조인 텍스트를 조인의 맨 아래에 추가
  10. SQL 버튼 바로 왼쪽에있는 "Return Data"버튼을 누르십시오.
    • 이 시점에서 원하는 특정 데이터 만 선택하도록 SQL을 편집 할 수 있습니다. 결과에서 열을 숨기는 것이 더 쉽다는 것을 알았습니다.
  11. 검색어를 어딘가에 놓고 위치를 확인하십시오.
    • 여기에 이미지 설명을 입력하십시오

희미한 마음이 아닙니다. 그러나 Office의 일부로 업데이트되지 않은 일부를 볼 수있는 좋은 기회를 원한다면 좋은 기회입니다.


1
[@ID] 표기법에 대한 참조가 있습니까? 나는 그것이 작동한다는 것을 의심하지 않지만 전에는 본 적이 없으며 Excel에서 많은 작업을 수행합니다.
TJL

1
@TJL 테이블을 테이블로 형식화하면 다른 열을 참조하기 위해 이러한 종류의 표기법을 사용합니다. 셀 참조보다 훨씬 명확합니다. 2010+ 기능일까요? 잘 모르겠습니다. 2010 년 이전에는 표 형식으로 마법을 사용하지 않았습니다.
enderland


원래 쿼리에서 LEFT 단어를 FULL 단어로 변경할 수 없습니까? FULL JOIN 구문을 지원하는 ACE OLEDB 드라이버를 사용하여 해당 쿼리를 실행하고 있다고 확신합니다.
Kyle Hale

14

대체 솔루션으로 Power Query를 제안해도 됩니까? 기본적으로 정확하게 이런 종류의 작업을 수행하는 Microsoft의 무료 Excel 추가 기능입니다. 그 기능은 실제로 Excel 2016에도 직접 포함되므로 미래에도 보장됩니다.

어쨌든 파워 쿼리를 사용하면 단계가 매우 간단합니다.

  1. 두 테이블을 모두 쿼리로 Power Query Editor에 가져옵니다.
  2. 적절한 조인 열을 설정하고 조인 유형을 전체 외부로 설정하여 병합 쿼리 변환을 수행하십시오.
  3. 결과표를 새 시트에 넣습니다.

이것에 대한 좋은 점은 일단 설정 한 후에 기본 데이터 테이블을 변경하면 데이터> 모두 새로 고침을 누르면 Power Query 결과 시트도 업데이트됩니다.


정말 흥미로운. 식당을 소유하고있는 친구가 MS Office에 대해 묻고 MS Access가 포함되지 않은 2016 년 제품군을 보여주었습니다. 나는 그것이 왜 그런지 지금 본다. Excel에는 많은 제한이있었습니다. 나는 어떤 기능도 가치가 없었고 새로운 모습을 좋아하지 않았기 때문에 2003 년 이상을 구입하지 않았습니다. 2010 이상. Access는이 모든 것들을 수행하며 질문을 제기합니다. Access가이를 달성 할 수있는 방법으로 많은 사람들이 Excel에서 데이터베이스를 사용하려고하는 이유는 무엇입니까? 내가 볼 수있는 유일한 것은 아마도 좋은 Access DB가 작동하려면 좋은 VB 경험이 필요하다는 것입니다.
ejbytes

@ejbytes 대부분의 사람들은 스프레드 시트의 개념을 이해합니다. 대부분은 데이터베이스의 개념을 이해하지 못합니다. 데이터베이스로 스프레드 시트 프로젝트를 데이터베이스로 변환하는 프로젝트가 있었으며 데이터베이스 작동 방식에 대한 광범위한 설명 후에도 사용자는 여전히 "스프레드 시트"라고했습니다.
enderland

@enderland 당신이 옳다고 생각합니다. 엄격하지 않은 규칙과 비 연속적인 유연성을 갖춘 스프레드 시트 및 필터로 위장한 쿼리 임시 이동 테이블 및 목록을위한 플랫폼입니다.
ejbytes

@ejbytes tldr 버전은 MS가 Excel에서 columnstore 메모리 엔진을 테스트하여 더 많은 행을 허용하고 외부 데이터 연결을 포함 시켰으며 인기가 높았으므로 ETL 도구에 추가했습니다. 이제 모든 도구를 PowerBI로 롤업했습니다.
Kyle Hale

@KyleHale Office 2010을 사용하고 있으며 전체 외부 참여를 시도하고 있지만 Power Query는 첫 번째 테이블에없는 두 번째 테이블의 ID를 무시합니다.
GeMir

0

(외부 조인)을 반 시뮬레이트하는 빠른 방법은 두 번째 목록을 가져 와서 주먹 목록 바로 아래에 붙여 넣는 것입니다. 즉, (기본 키)가 모두 동일한 (기본) 열에 있습니다. 그런 다음 기본 열을 정렬하면 인터리브 목록으로 끝나고 전치 된 IF 방정식을 수행합니다 (수퍼 유저가 테이블 레이아웃보기를 망칩니다.).

listA listB


샘 블루 팀 32874 팀 레드 메리 5710 크리스 그린 구스타브 047 프레드 블루
메리 블랙

복사 / 붙여 넣기 / 정렬, 결과는 다음과 같습니다. AB chris green fred blue gustav 047 mary 5710 mary black sam blue tim 32874 tim red

셀 c1에 대한 공식 : (c1) = if (A1 = A2, B2)

결과는 다음과 같습니다.

ABC Chris Green FALSE 프레드 블루 FALSE 구스타프 047 FALSE 메리 5710 블랙 메리 블랙 FALSE 샘 블루 FALSE 팀 32874 레드 팀 레드 FALSE

거짓 등을 제거하기 위해 C를 정렬하십시오. 아이디어의 기본 버전이므로 더 많은 데이터가 묶여 있으면 확장하십시오. -wag770310


읽을 수 있도록 형식을 지정할 수 있습니까?
davidbaumann
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.