Bir Google E-Tablosunda UNION SELECT yapabilir misiniz?


10

Aynı formu kullanarak aynı formdaki üç farklı kişiden yanıt toplayan ve üç kez düzenleyen bir forma bağlı bir Google E-Tablom var. Bu, üç kişinin bulunduğu yeri belirten üç sütun içeren bir sayfa oluşturur.

Bir görünüm / sorgu bu üç sütun alır ve onları 'birbirlerinin altında değil, yan yana koyar üretmek gerekir. Bir veritabanında aşağıdaki sorgu gibi bir şey yapardı, benim 'sayfa' tblMain çağırdı ve ilgili dört sütun (ayrıca konu kimliğine ihtiyacım var) belirtti.

tblMain:

ID        RALocation        RBLocation        RCLocation

Sorgu:

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 E-Tablolar'da bunu yapmanın bir yolu olup olmadığını bilen var mı? Birden fazla sayfa oluşturmayı ve sonunda onları birleştirmeyi umursamıyorum, ancak bunu nasıl yapacağım konusunda biraz sıkıştım.


Satır sayısı sabit mi yoksa zamanla değişecek mi?
Rubén

Yanıtlar:


3

Boş hücrelerin saklanıp saklanmayacağına bağlı olarak iki sürüm öneriyorum. Temel fikir aynı:

  1. Tablonuzda bulunmayan bir karakter seçin (örneğin, üzerinden erişilebilen egzotik bir Unicode karakter CHAR).
  2. JOINÜç sütunun her biri için komutta kullanın .
  3. Aradaki karakteri ekleyerek sonuçları birleştirin.
  4. SPLIT aynı karakterle birleştirilmiş dize.
  5. TRANSPOSE sonuç.

Örneğin:

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

nerede katılmadan / yarma için, ben karakterini aldı CHAR(57344)edilir, özel kullanım için belirtilen herhangi bir geçerli girdi mevcut olmamalıdır ve bu nedenle.

Yukarıdaki formül boş girişleri kaldırır , çünkü olan budur SPLIT. Verileriniz boşluk içermiyorsa bu kullanışlı olabilir: verilerin son satırının nerede olduğunu izleme zahmetinden kurtarır. Ancak diğer zamanlarda boşluklar korunmalıdır.

Boşlukları korumak için , Jacob Jan Tuinstra tarafından verilen cevap yerine boşluk yerine başka bir özel kullanım Unicode kullandım (belki, sadece boşluk içeren bazı hücreleriniz olduğunu ve bunları saklamak istediğinizi). Bu iki ekstra adımdan oluşur: önceki gibi her şeyi katıldıktan sonra, kullandığım SUBSTITUTEyerine CHAR(57344)göre CHAR(57344)&CHAR(57345), daha önce olduğu gibi bölünmüş ve yerine CHAR(57345)boş bir dize ile.

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

Tam sonuç şuna benzer (şimdi son veri satırının nerede olduğunu belirttiğinize dikkat edin):

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

Bir uyarı daha: Google E-Tablolar'daki dizelerin uzunluğu 50000 karakteri aşamaz. Verileriniz dize tabanlı yaklaşımın çalışması için çok büyükse, bir komut dosyası kullanın ( bu , başlamak için iyi bir yerdir).


Bu bir tedavi olur ve doğru sonucu elde etmek için onları birleştirebilirim. Şimdi yapmaya çalıştığım tek şey, NULL değerlere saygı duymak ve onları ele geçirmek, FİLTRE'nize ihtiyaç duyulmadığı ortaya çıkıyor, bir NULL değerleri bulursa onları çıkaracaktır. NULL'a saygı duymamı nasıl sağladım?
AnneB

1
Aslında, "diğer cevap" şu anda kısmi bir cevaptır. Diğer alternatiflerin yanı sıra, ilgili eksik kısım, UNION-SELECT yaklaşımı yerine gömülü dizilerin nasıl kullanılacağı ile ilgilidir.
Rubén

2
Olağanüstü. Muhtemelen pilotumuz bittiğinde senaryoya bakmam gerekecek ama şimdilik devam etmem yeterli. Buradaki insanlar gerçekten yardımsever, hepinize teşekkürler!
AnneB


2

Kısa cevap

Google E-Tablolar, UNION-SELECT'e benzer bir sonuç elde etmek için çeşitli alternatifleri olan çok güçlü bir araçtır.

Alternatifler

Gömülü diziler

SPLIT-TRANSPOSE-JOIN-CHAR yöntemini kullanmanın bir alternatifi gömülü diziler kullanmaktır. Bu yöntemin bir avantajı, dizeleri oluşturma / çözme gerektirmemesidir, dolayısıyla ilgili olmadığı karakter sayısının sınırıdır.

Gömülü dizi

süzme

Yukarıdakiler, benzer bir UNION-SELECT davranışına sahip olmak için filtrelemeyi gerektiren durumlarda FILTER () ile birlikte kullanılabilir . Misal

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

QUERY () ile birlikte de kullanılabilir, ancak sonuçları bir başlık satırı içerir. Üstbilgilerden nasıl kurtulacağınızı öğrenmek için Google E-Tablolar sorgusu sonucunda satırdan kurtulma konusuna bakın .

Değerler sütunu nasıl oluşturulur?

Değerler sütunu oluşturmak için TRANSPOSE-SPLIT-REPT komutunu kullanın.

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

Ayrıca QUERY () bir değer sütunu oluşturmak için kullanılabilir, ancak üstbilgiler satırını kaldırmak formülü daha karmaşık hale getirebilir. Yalnızca dize uzunluğu sınırlamaları sorunlara neden oluyorsa kullanın.

Gömülü Diziler ve TRANSPOSE-SPLIT-REPT kullanarak çözüm

TblMain aralığının A1: D7 olduğunu varsayalım; burada A1: D1 tablo başlıklarıdır ve veriler A2: D7'dir.

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

Referanslar

Google e-tablo dizilerini ekleme - StackOverflow


Benden daha fazla cevap okumalısınız;). Bununla ilgili henüz resmi bir yardım makalesi bulamadım. Google Ürünleri Forumlarında ve İnternet'te zaten eklediğim referans gibi konuların olduğunu biliyorum.
Rubén

Bunun için teşekkür ederim, şu anda son çözüme bakıyorum, sanırım pilotumuz için çok güzel olacak!
AnneB
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.