¿Se puede hacer UNION SELECT en una hoja de Google?

10

Tengo una hoja de Google vinculada a un formulario que recopila respuestas de tres personas diferentes sobre el mismo tema usando el mismo formulario y editando tres veces. Esto crea una hoja que contiene tres columnas que indican dónde se encuentran las tres personas.

Necesito producir una vista / consulta que tome esas tres columnas y las ponga 'debajo' una de la otra, y no una al lado de la otra. En una base de datos, habría hecho algo como la consulta a continuación, llamé a mi 'hoja' tblMain y dije las cuatro columnas relevantes (también necesito el ID del asunto).

tblMain:

ID        RALocation        RBLocation        RCLocation

Consulta:

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

¿Alguien sabe si hay una manera de hacerlo en Google Sheets? No me importa construir más de una hoja y luego combinarlas al final, pero estoy un poco atascado en cómo hacer esto.

AnneB
fuente
¿El número de filas está fijo o cambiará con el tiempo?
Rubén

Respuestas:

3

Ofrezco dos versiones, dependiendo de si las celdas en blanco deben mantenerse. La idea básica es la misma:

  1. Elija un personaje que no esté contenido en su tabla (por ejemplo, un personaje exótico de Unicode accesible mediante CHAR).
  2. Úselo en el JOINcomando para cada una de las tres columnas.
  3. Concatenar los resultados, agregando el carácter en el medio.
  4. SPLIT la cadena concatenada por el mismo caracter.
  5. TRANSPOSE el resultado.

Por ejemplo:

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

donde para unir / dividir, elegí el carácter CHAR(57344), que está designado para uso privado y, por lo tanto, no debe estar presente en ninguna entrada válida.

La fórmula anterior elimina las entradas en blanco , porque esto es lo que SPLIThace. Esto puede ser conveniente si sus datos no tienen espacios en blanco: le ahorra la molestia de rastrear dónde está la última fila de datos. Pero otras veces, los espacios en blanco deben conservarse.

Para preservar los espacios en blanco, sigo la respuesta de Jacob Jan Tuinstra, excepto que usé otro Unicode de uso privado en lugar de espacio (quién sabe, tal vez tienes algunas celdas que contienen solo un espacio y quieres conservarlas). Esto implica dos pasos adicionales: después de unir todo como antes, solía SUBSTITUTEreemplazar CHAR(57344)por CHAR(57344)&CHAR(57345), luego dividir como antes y reemplazar CHAR(57345)por una cadena vacía.

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

El resultado completo se ve así (observe que ahora especifico dónde está la última fila de datos):

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

Una advertencia más: las cadenas en las Hojas de cálculo de Google no pueden superar los 50000 caracteres de longitud. Si sus datos son demasiado grandes para que funcione el enfoque basado en cadenas, use un script ( este es un buen lugar para comenzar).

Comunidad
fuente
Eso funciona de maravilla, y puedo combinarlos para obtener el resultado correcto. Lo único que estoy tratando de hacer ahora es lograr que respete los valores NULL y detenerlos, resulta que su FILTER no era necesario, los eliminará si encuentra valores NULL. ¿Alguna idea de cómo hago para respetar el NULL?
AnneB
1
En realidad, la "otra respuesta" es una respuesta parcial en este momento. Además de otras alternativas, la parte faltante relevante es sobre cómo usar matrices incrustadas en lugar del enfoque UNION-SELECT.
Rubén
2
Maravilloso. Probablemente tendré que mirar el guión para cuando nuestro piloto termine, pero por ahora tengo suficiente para continuar. La gente aquí es realmente útil, ¡gracias a todos!
AnneB
3

Es posible hacer una unión en la hoja de cálculo de Google muy fácilmente hoy en día con esta fórmula:

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

Ver más información en la Ayuda de Google Docs: Uso de matrices en Hojas de cálculo de Google

Emilio Nicolás
fuente
2

Respuesta corta

Google Sheets es una herramienta muy poderosa que tiene varias alternativas para lograr un resultado similar a UNION-SELECT.

Alternativas

Arrays integrados

Una alternativa para usar la forma SPLIT-TRANSPOSE-JOIN-CHAR es usar matrices incrustadas. Una ventaja de este método es que no requiere construir / deconstruir cadenas, por lo que el límite del número de caracteres no es relevante.

Matriz Emdedded

Filtración

Lo anterior podría usarse en combinación con FILTER () para aquellos casos que requieren que el filtrado tenga un comportamiento similar de UNION-SELECT. Ejemplo

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

También podría usarse en combinación con QUERY () pero sus resultados incluyen una línea de encabezados. Para obtener información sobre cómo deshacerse de los encabezados, consulte Deshacerse de la fila como resultado de la consulta de Hojas de cálculo de Google .

Cómo crear una columna de valores

Use TRANSPOSE-SPLIT-REPT para crear una columna de valores.

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

También QUERY () podría usarse para crear una columna de valores, pero eliminar la fila de encabezados podría hacer que la fórmula sea más compleja. Úselo solo si las limitaciones de longitud de la cadena causan problemas.

Solución utilizando matrices integradas y TRANSPOSE-SPLIT-REPT

Suponga que el rango tblMain es A1: D7, donde A1: D1 son los encabezados de la tabla y los datos están en 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),","))}}

Referencias

Anexar matrices de hojas de cálculo de Google - StackOverflow

Rubén
fuente
Tienes que leer más respuestas de mí;). Todavía no encontré artículos de ayuda oficiales sobre esto. Sé que hay hilos en los foros de productos de Google y en Internet, como la referencia que ya incluí.
Rubén
Gracias por esto, actualmente estoy buscando la última solución, ¡creo que funcionará muy bien para nuestro piloto!
AnneB