Você pode fazer um UNION SELECT em uma planilha do Google?

10

Eu tenho uma planilha do Google vinculada a um formulário que coleta respostas de três pessoas diferentes sobre o mesmo assunto usando o mesmo formulário e editando três vezes. Isso cria uma planilha que contém três colunas informando onde as três pessoas estão localizadas.

Eu preciso produzir uma exibição / consulta que pegue essas três colunas e as coloque 'embaixo' umas das outras, e não próximas umas das outras. Em um banco de dados, eu teria feito algo como a consulta abaixo, chamei minha 'planilha' tblMain e indiquei as quatro colunas relevantes (também preciso do ID do assunto).

tblMain:

ID        RALocation        RBLocation        RCLocation

Inquerir:

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

Alguém sabe se existe uma maneira de fazer isso no Planilhas Google? Não me importo de construir mais de uma planilha e depois combiná-las no final, mas estou um pouco empolgado em como fazer isso.

AnneB
fonte
O número de linhas é fixo ou será alterado ao longo do tempo?
Rubén

Respostas:

3

Eu ofereço duas versões, dependendo se as células em branco devem ser mantidas. A ideia básica é a mesma:

  1. Escolha um personagem que não esteja contido na sua tabela (por exemplo, um caractere Unicode exótico acessível via CHAR).
  2. Use-o no JOINcomando para cada uma das três colunas.
  3. Concatene os resultados, adicionando o caractere no meio.
  4. SPLIT a sequência concatenada pelo mesmo caractere.
  5. TRANSPOSE o resultado.

Por exemplo:

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

onde por se juntar / divisão, eu peguei o personagem CHAR(57344), que é designado para uso privado e, portanto, não deve estar presente em qualquer entrada válida.

A fórmula acima remove entradas em branco , porque é isso que SPLITfaz. Isso pode ser conveniente se seus dados não tiverem espaços em branco: poupa o trabalho de rastrear onde está a última linha dos dados. Mas outras vezes, os espaços em branco devem ser preservados.

Para preservar espaços em branco, sigo a resposta de Jacob Jan Tuinstra, exceto que usei outro Unicode de uso privado em vez de espaço (quem sabe, talvez você tenha algumas células que contêm apenas um espaço e deseja mantê-las). Isso envolve duas etapas extras: depois de juntar tudo como antes, eu uso SUBSTITUTEpara substituir CHAR(57344)por CHAR(57344)&CHAR(57345), depois divido como antes e substituo CHAR(57345)por string vazia.

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

O resultado completo é semelhante a este (observe que agora eu especifico onde está a última linha de dados):

=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), "" )))

Mais uma ressalva: as seqüências de caracteres no Planilhas Google não podem exceder 50000 caracteres. Se seus dados forem muito grandes para que a abordagem baseada em string funcione, use um script ( este é um bom lugar para começar).

Comunidade
fonte
Isso funciona muito bem, e eu posso combiná-los para obter o resultado certo. A única coisa que agora estou tentando fazer é fazer com que respeite os valores NULL e os encaminhe, acontece que o seu FILTER não era necessário; eles serão retirados se encontrar valores NULL. Alguma idéia de como faço para respeitar o NULL?
AnneB
11
Na verdade, a "outra resposta" é uma resposta parcial no momento. Além de outras alternativas, a parte que falta relevante é sobre como usar matrizes incorporadas em vez da abordagem UNION-SELECT.
Rubén
2
Maravilhoso. Provavelmente terei que olhar o script para quando o piloto terminar, mas por enquanto tenho o suficiente para continuar. As pessoas aqui são realmente úteis, obrigado a todos!
21715 AnneB
3

Hoje em dia é possível fazer uma união na planilha do Google com muita facilidade com esta fórmula:

={'Sheet1'!A2:A;'Sheet2'!A2:A;'Sheet3'!A2:A}

Veja mais informações na Ajuda do Google Docs: Uso de matrizes no Planilhas Google

Emilio Nicolás
fonte
2

Resposta curta

O Planilhas Google é uma ferramenta muito poderosa que possui várias alternativas para obter um resultado semelhante ao UNION-SELECT.

Alternativas

Matrizes incorporadas

Uma alternativa para usar a maneira SPLIT-TRANSPOSE-JOIN-CHAR é usar matrizes incorporadas. Uma vantagem desse método é que ele não requer construção / desconstrução de strings; portanto, o limite do número de caracteres não é relevante.

Matriz emdedded

Filtragem

O acima pode ser usado em combinação com FILTER () para os casos que exigem filtragem para ter um comportamento semelhante ao de UNION-SELECT. Exemplo

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

Também pode ser usado em combinação com QUERY (), mas seus resultados incluem uma linha de cabeçalhos. Para saber como se livrar dos cabeçalhos, consulte Livrar-se de linhas no resultado da consulta de planilhas do Google .

Como criar uma coluna de valores

Use TRANSPOSE-SPLIT-REPT para criar uma coluna de valores.

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

Também QUERY () pode ser usado para criar uma coluna de valores, mas remover a linha de cabeçalhos pode tornar a fórmula mais complexa. Use-o apenas se as limitações do comprimento da string causarem problemas.

Solução usando matrizes incorporadas e TRANSPOSE-SPLIT-REPT

Suponha que o intervalo tblMain seja A1: D7, onde A1: D1 seja o cabeçalho da tabela e os dados estejam em 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),","))}}

Referências

Anexando matrizes de planilhas do Google - StackOverflow

Rubén
fonte
Você tem que ler mais respostas minhas;). Ainda não encontrei artigos oficiais de ajuda sobre isso. Eu sei que existem tópicos nos Fóruns de produtos do Google e na Internet, como a referência que eu já incluí.
Rubén
Obrigado por isso, atualmente estou procurando a última solução, acho que será muito boa para o nosso piloto!
AnneB