Google 시트에서 UNION SELECT를 수행 할 수 있습니까?


10

동일한 양식을 사용하고 3 번 수정 한 동일한 주제에 대해 서로 다른 세 사람의 답글을 수집하는 양식에 연결된 Google 스프레드 시트가 있습니다. 이렇게하면 세 사람이있는 위치를 나타내는 세 개의 열이 포함 된 시트가 만들어집니다.

이 세 열을 가져 와서 서로 '가 아닌'아래에 놓는보기 / 쿼리를 생성해야합니다. 데이터베이스에서 아래 쿼리와 같은 작업을 수행했을 것입니다. 내 'sheet'tblMain을 호출하고 관련 4 개의 열을 지정했습니다 (주제 ID가 필요합니다).

메인 :

ID        RALocation        RBLocation        RCLocation

질문:

Select ID, RALocation as Location, 'RA' as Role from tblMain
Union
Select ID, RBLocation as Location, 'RB' as Role from tblMain
Union
Select ID, RCLocation as Location, 'RC' as Role from tblMain

Google 스프레드 시트에이 작업을 수행 할 수있는 방법이 있는지 아는 사람이 있습니까? 나는 두 장 이상의 시트를 만들고 마지막에 결합하는 것을 신경 쓰지 않지만이 작업을 수행하는 방법에 약간 붙어 있습니다.


행 수가 고정되어 있거나 시간이 지남에 따라 변경됩니까?
Rubén

답변:


3

빈 셀을 유지할지 여부에 따라 두 가지 버전을 제공합니다. 기본 아이디어는 동일합니다.

  1. 테이블에 포함되지 않은 문자를 선택하십시오 (예 :를 통해 액세스 할 수있는 이국적인 유니 코드 문자 CHAR).
  2. JOIN세 열 각각 에 대해 명령에 사용하십시오 .
  3. 사이에 문자를 추가하여 결과를 연결하십시오.
  4. SPLIT 같은 문자로 연결된 문자열
  5. TRANSPOSE 결과.

예를 들면 다음과 같습니다.

=TRANSPOSE( SPLIT( JOIN(CHAR(57344),A1:A) &CHAR(57344)& JOIN(CHAR(57344),B1:B) &CHAR(57344)& JOIN(CHAR(57344),C1:C), CHAR(57344) ) )

합류 / 쪼개기 위해 개인적CHAR(57344) 으로 지정되어 유효한 입력에 없어야 하는 캐릭터를 선택했습니다 .

위의 공식은 빈 항목을 제거 이 무엇 때문에 SPLIT않습니다. 데이터에 공백이없는 경우 편리 할 수 ​​있습니다. 데이터의 마지막 행 위치를 추적하는 데 따른 문제를 방지합니다. 그러나 다른 경우에는 공백을 유지해야합니다.

공백을 유지하기 위해 Jacob Jan Tuinstra의 대답을 따르십시오 . 단 , 공백 대신 다른 개인용 유니 코드를 사용했습니다 (아마도 공백이 포함 된 셀이 있고 유지하려는 경우가 있습니다). 여기에는 두 가지 추가 단계가 필요합니다. 이전과 같이 모든 것을 결합한 후로 SUBSTITUTE교체 CHAR(57344)하고 CHAR(57344)&CHAR(57345)이전과 같이 나누고 CHAR(57345)빈 문자열로 교체 하는 데 사용합니다.

=TRANSPOSE( ARRAYFORMULA(SUBSTITUTE( SPLIT( SUBSTITUTE(...joins... , CHAR(57344),CHAR(57344)&CHAR(57345)), CHAR(57344) ), CHAR(57345), "")))

전체 결과는 다음과 같습니다 (이제 마지막 데이터 행의 위치를 ​​지정합니다).

=TRANSPOSE( ARRAYFORMULA(SUBSTITUTE( SPLIT( SUBSTITUTE(JOIN(CHAR(57344),A1:A9) &CHAR(57344)& JOIN(CHAR(57344),B1:B9) &CHAR(57344)& JOIN(CHAR(57344),C1:C9), CHAR(57344),CHAR(57344)&CHAR(57345)), CHAR(57344) ), CHAR(57345), "" )))

한 가지 더 경고 : Google 스프레드 시트의 문자열 길이는 50000자를 초과 할 수 없습니다. 데이터가 문자열 기반 접근 방식으로 작동하기에 너무 큰 경우 스크립트를 사용하십시오 ( 스크립트 는 시작하기에 좋은 곳입니다).


그것은 치료법으로 작동하며 올바른 결과를 얻기 위해 그것들을 결합 할 수 있습니다. 내가 지금하려는 것은 NULL 값을 존중하고 가져 오는 것입니다 .FILTER가 필요하지 않은 것으로 나타났습니다. NULL 값을 찾으면 제거합니다. NULL을 존중하도록 어떻게 생각하십니까?
AnneB

1
실제로, "다른 답변"은 현재 부분적인 답변입니다. 다른 대안 외에도 누락 된 부분은 UNION-SELECT 방식 대신 내장형 배열을 사용하는 방법에 관한 것입니다.
Rubén

2
훌륭한. 파일럿이 끝났을 때 스크립트를 살펴 봐야 할 것입니다. 그러나 지금은 계속 진행할 수 있습니다. 여기 사람들이 정말 도움이됩니다. 감사합니다!
AnneB


2

짧은 답변

Google 스프레드 시트는 UNION-SELECT와 비슷한 결과를 얻을 수있는 몇 가지 대안이있는 매우 강력한 도구입니다.

대안

임베디드 어레이

SPLIT-TRANSPOSE-JOIN-CHAR 방식을 사용하는 대안은 임베디드 어레이를 사용하는 것입니다. 이 방법의 한 가지 장점은 문자열을 구성 / 해체 할 필요가 없으므로 문자열의 수에 제한이 없다는 것입니다.

임베디드 어레이

필터링

위 의 함수는 UNION-SELECT와 유사한 동작을 갖도록 필터링해야하는 경우 FILTER () 와 함께 사용할 수 있습니다 . 예

={Filter(A1:B2, B1:B2=2);Filter(D1:E2, E1:E2=6);Filter(G1:H2, H1:H2=12)}

QUERY () 와 함께 사용할 수도 있지만 결과에는 헤더 행이 포함됩니다. 헤더를 제거하는 방법에 대해 알아 보려면 Google 스프레드 시트 쿼리 결과에서 행 제거를 참조 하십시오 .

값 열을 만드는 방법

TRANSPOSE-SPLIT-REPT를 사용하여 값 열을 작성하십시오.

={Transpose(Split(REPT("RA,",6),","))}

또한 QUERY ()를 사용하여 값 열을 만들 수 있지만 헤더 행을 제거하면 수식이 더 복잡해질 수 있습니다. 문자열 길이 제한으로 인해 문제가 발생할 경우에만 사용하십시오.

임베디드 어레이 및 TRANSPOSE-SPLIT-REPT를 사용하는 솔루션

tblMain 범위가 A1 : D7이라고 가정합니다. 여기서 A1 : D1은 테이블 헤더이고 데이터는 A2 : D7에 있습니다.

={{"ID";A2:A7;A2:A7;A2:A7},
{"Location";B2:B7;C2:C7;D2:D7},{"Role";
Transpose(Split(REPT("RA,",6),","));
Transpose(Split(REPT("RB,",6),","));
Transpose(Split(REPT("RC,",6),","))}}

참고 문헌

Google 스프레드 시트 배열 추가-CODE Examples


나에게서 더 많은 답변을 읽어야합니다.). 아직 공식적인 도움말을 찾지 못했습니다. Google 제품 포럼 및 인터넷에 이미 포함 된 참조와 같은 스레드가 있음을 알고 있습니다.
Rubén

감사합니다. 현재 마지막 솔루션을보고 있습니다. 파일럿에게 매우 유용 할 것입니다.
AnneB
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.