Puoi fare UNION SELECT in un foglio di Google?


10

Ho un foglio di Google collegato a un modulo che raccoglie risposte da tre persone diverse sullo stesso argomento utilizzando lo stesso modulo e modificando tre volte. Questo crea un foglio che contiene tre colonne che indicano dove si trovano le tre persone.

Ho bisogno di produrre una vista / query che prende quelle tre colonne e le mette "sotto" l'una rispetto all'altra e non una accanto all'altra. In un database avrei fatto qualcosa di simile alla query di seguito, ho chiamato il mio 'foglio' tblMain e dichiarato le quattro colonne pertinenti (ho anche bisogno dell'ID soggetto).

tblMain:

ID        RALocation        RBLocation        RCLocation

Query:

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

Qualcuno sa se c'è un modo per farlo in Fogli Google? Non mi dispiace costruire più di un foglio e poi combinarli alla fine, ma sono un po 'bloccato su come farlo.


Il numero di righe è fisso o cambierà nel tempo?
Rubén,

Risposte:


3

Offro due versioni, a seconda che le celle vuote debbano essere mantenute. L'idea di base è la stessa:

  1. Scegli un personaggio che non è contenuto nella tua tabella (es. Un personaggio Unicode esotico accessibile tramite CHAR).
  2. Usalo nel JOINcomando per ciascuna delle tre colonne.
  3. Concatena i risultati, aggiungendo il personaggio in mezzo.
  4. SPLIT la stringa concatenata dello stesso carattere.
  5. TRANSPOSE il risultato.

Per esempio:

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

dove per unirmi / dividere, ho scelto il personaggio CHAR(57344), che è designato per uso privato e quindi non dovrebbe essere presente in nessun input valido.

La formula sopra rimuove le voci vuote , perché è questo che SPLITfa. Questo può essere utile se i tuoi dati non hanno spazi vuoti: ti salva il problema di tracciare dove si trova l'ultima riga dei dati. Altre volte, gli spazi vuoti dovrebbero essere preservati.

Per preservare gli spazi vuoti, seguo la risposta di Jacob Jan Tuinstra, tranne per il fatto che ho usato un altro uso privato Unicode invece dello spazio (chissà, forse hai delle celle che contengono solo uno spazio e vuoi mantenerle). Ciò comporta due passaggi aggiuntivi: dopo aver unito tutto come prima, lo uso SUBSTITUTEper sostituire CHAR(57344)con CHAR(57344)&CHAR(57345), quindi dividere come prima e sostituire CHAR(57345)con stringa vuota.

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

Il risultato completo è simile al seguente (notare che ora specifica dove si trova l'ultima riga di dati):

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

Un altro avvertimento: le stringhe in Fogli Google non possono superare i 50000 caratteri di lunghezza. Se i tuoi dati sono troppo grandi per funzionare con un approccio basato su stringhe, usa uno script ( questo è un buon punto di partenza).


Funziona a meraviglia e posso combinarli per ottenere il risultato giusto. L'unica cosa che sto cercando di fare ora è far sì che rispetti i valori NULL e li superi, si scopre che il tuo FILTER non era necessario, li eliminerà se trova valori NULL. Hai idea di come ottengo che rispetti il ​​NULL?
AnneB,

1
In realtà, l '"altra risposta" è una risposta parziale in questo momento. Oltre ad altre alternative, la parte mancante pertinente riguarda l'uso di array incorporati anziché l'approccio UNION-SELECT.
Rubén,

2
Meraviglioso. Probabilmente dovrò guardare la sceneggiatura per quando il nostro pilota sarà finito, ma per ora ho abbastanza per continuare. Le persone qui sono davvero utili, grazie a tutti!
AnneB,


2

Risposta breve

Fogli Google è uno strumento molto potente che ha diverse alternative per ottenere un risultato simile a UNION-SELECT.

alternative

Array incorporati

Un'alternativa per utilizzare il modo SPLIT-TRANSPOSE-JOIN-CHAR consiste nell'utilizzare array incorporati. Un vantaggio di questo metodo è che non richiede di costruire / decostruire stringhe, quindi il limite del numero di caratteri non è rilevante.

Array incorporato

filtraggio

Quanto sopra potrebbe essere usato in combinazione con FILTER () per quei casi che richiedono un filtro per avere un comportamento simile a UNION-SELECT. Esempio

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

Inoltre potrebbe essere utilizzato in combinazione con QUERY () ma i suoi risultati includono una riga di intestazione. Per informazioni su come sbarazzarsi delle intestazioni, vedi Eliminare la riga in seguito alla query di Fogli di lavoro Google .

Come creare una colonna di valori

Utilizzare TRANSPOSE-SPLIT-REPT per creare una colonna di valori.

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

Anche QUERY () potrebbe essere utilizzato per creare una colonna di valori, ma la rimozione della riga delle intestazioni potrebbe rendere la formula più complessa. Usalo solo se i limiti di lunghezza della stringa causano problemi.

Soluzione che utilizza array incorporati e TRANSPOSE-SPLIT-REPT

Supponiamo che l'intervallo tblMain sia A1: D7, dove A1: D1 è l'intestazione della tabella e che i dati siano in 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),","))}}

Riferimenti

Aggiunta di array di fogli di calcolo Google - StackOverflow


Devi leggere altre risposte da me;). Non ho ancora trovato un aiuto ufficiale su questo. So che ci sono discussioni nei forum dei prodotti Google e su Internet, come il riferimento che ho già incluso.
Rubén,

Grazie per questo, sto attualmente esaminando l'ultima soluzione, penso che farà molto bene per il nostro pilota!
AnneB,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.