Sütun başlıklarını = QUERY içinde kullanabilir miyim?


16

=QUERYFonksiyon 1 , 2 , 3 için belgeleri okumak , bazıları doğrudan benim sorgu sütun başlıkları kullanabilmek gerekir anlamına geliyor. Örneğin, =QUERYişlev üçüncü opsiyonel parametre alır , HEADERSsen başlık satır sayısı belirtmenizi sağlar.

Sütun başlıklarını kullanabilirsem sorgularımın çoğu daha güzel olurdu, bu nedenle sütun dizinleri kullanmak zorunda kalmadım, ancak çalışmasını sağlayamıyorum.

Misal:

A      B         C
---------------------
Name   Phone     City
Vidar  12345678  Oslo
Rupert 32165487  Berlin

Sütun dizinleri kullanarak bunu sorgulamak mümkün:

=QUERY(Sheet1!A1:C; "select A, B, C where A = 'Vidar'"; 1)

... ancak sütun üstbilgilerini kullanmıyor:

=QUERY(Sheet1!A1:C; "select A, B, C where Name = 'Vidar'"; 1)

... bu bana hata veriyor : Geçersiz sorgu: [Name] sütunu tabloda yok

Bunun gibi sütun başlıklarını kullanmak mümkün müdür? Değilse, HÈADERSparametrenin amacı nedir?

Yanıtlar:


4

QUERYFonksiyonda bahsettiğiniz üçüncü parametre , başlıkları kontrol etmek içindir. Set olmak ise -1, o zaman Google E-Tablo eldeki verilere dayanarak, seçme üstbilgilerde kendi seçim gösterdiğini: resim açıklamasını buraya girin

Aşağıdaki veri kümesini kullandım: resim açıklamasını buraya girin

Eğer olarak ayarlanırsa 0, başlık kullanılmayacak ve şu şekilde bırakılacaktır: resim açıklamasını buraya girin

Eğer olarak ayarlanırsa 1, ilk satır kullanılır ve şu şekilde kalır : resim açıklamasını buraya girin

2Veya -1veya olarak ayarlanırsa left blank, ilk iki satır kullanılır ve şöyle bırakılır: resim açıklamasını buraya girin

Üstbilgileri kullanarak, örneğin örnekte yaptığınız gibi, mümkün değildir. En yakın şey QUERY, bu cevapta açıklanan fonksiyonun kullanımı olacaktır . Orada bir sütun adı kullanılır.


Ah, tamam, o HEADERS > 0zaman verilen başlık satırlarının sayısı =QUERYsorgu sonuçlarının en üstünde döndürülecekse , değil mi? Bu mantıklı - Ben HEADERSsadece sorguda yoksaymak için belirtilen satır düşündüm .
Vidar S. Ramdal

@Vidar Bu OFFSETseçenek ilk satırları yok saymak için kullanılabilir.
Jacob Jan Tuinstra

Deneyimlerime göre headers parametresini 0 olarak ayarlamak, Google dokümanlarının açıkladığı veya burada gösterilenleri yapmaz. Temelde söyleyebildiğim kadarıyla hiçbir şey yapmıyor (yani -1 ile aynı). Başka kimse bunu fark etti mi?
user24601

1
Orijinal posterin niyetinin raporda üstbilgileri almakla ilgili değil, daha çok sütun indekslerini kullanmak yerine (A veya B veya C'de olduğu gibi) sorgu deyiminde başlık adlarını kullanmakla ilgili olduğuna inanıyorum.
Farrel

7

Bunun gibi sütun başlıklarını kullanmak mümkün müdür?

Evet mümkün. İlk olarak, değeri 'Ad' ile eşleşen sütunun sütun numarasını almak için MATCH kullanmanız gerekir. Sonra hücre başvurusu almak için ADDRESS kullanmanız gerekir. Son olarak, hücre başvurusundan satır numarasını kaldırmak için SUBSTITUTE kullanmanız gerekir.

=QUERY(Sheet1!A1:C,"SELECT A, B, C where "&SUBSTITUTE(ADDRESS(1,MATCH("Name",Sheet1!A1:C1,0),4),1,"")&" = 'Vidar'")

3

Eski bir gönderiyken, karışıma çözümümü eklemek istedim. Daha yararlı bulduğum sütun adlarını kullanabilirsiniz. Bu şekilde, kaynak verilere sütun eklediğinizde veya kaynak verilerinden sütunlar kaldırdığınızda sorgu işlevi çağrılarınızı düzenlemeniz gerekmez.

Başkalarının maç ve yerine kullandıklarını gördüm, sadece sorgu işlev çağrısı için biraz farklı bir şey uyguladım.

İlk olarak - Bunun gibi tüm sütun adlarınızın bir arama tablosunu oluşturun. Arama tablom, yalnızca 'Yapılandırma' sayfasının E Sütununda başlar, çünkü sayfada başka öğeler bulunduğundan, kolayca kendi sayfasına yerleştirilebilir.

  • Sütun 1 (Sütun Adı)

    =TRANSPOSE( 'Source Data'!1:1 )
    
  • Sütun 2 (Sütun #)

    =arrayformula( row( E2:E ) - 1 )
    
  • Sütun 3 (Sütun Harfi)

    =arrayformula( if( int( F2:F / 26.5 ) > 0, char( int( F2:F / 26.5 )  + 64), "" ) & char( (F2:F - (int( F2:F / 26.5 ) * 26 ) ) + 64 ) )
    

    Bir sütun numarasını bir harfe dönüştürmek için ayrıntılandırmalara açığım. Bu formül yalnızca 78 sütunu işlemesi nedeniyle sınırlıdır. Yine de benim için fazlasıyla yeterli.

Şimdi Sorgu işlevi çağrınız şöyle görünecektir:

=query( 'Source Data'!$A:$L,
"Select " & " " &
vlookup( "Date", Config!$E:$G, 3, false ) & ", " &
vlookup( "Dev Query Engine Conn Count", Config!$E:$G, 3, false ) & ", " &
vlookup( "Dev Conn Limit Retry Count", Config!$E:$G, 3, false ) & ", " &
vlookup( "Dev Max Sequential Retry in One Minute", Config!$E:$G, 3, false ) & ", " &
vlookup( "Dev Conn Limit Errors", Config!$E:$G, 3, false ) & " " &
"where " & vlookup( "Display in Graph.", Config!$E:$G, 3, false ) & "=TRUE " &
"order by " & vlookup( "Date", Config!$E:$G, 3, false ) & " desc "
)

Güzel biçimlendirilmiş tutun ve yönetmek hiç de fena değil. Acı çekeceğiniz tek şey, vlookup aralığınızın sütun dizinini değiştirirseniz. Ancak, yardımcı bir aralık olduğu düşünüldüğünde, bu sık sık değişmemelidir.


3

Eski soru, ama bence bu çözüm buna değebilir.

Bir başlık adı kullanarak sütun dizinini (yani A, B, C ...) alan özel bir komut dosyası işlevini kullanabilirsiniz ve şöyle bir şey yapmanıza izin verir:

=query('MySheet'!A2:Z; 
   "select "&colIndex("'MySheet'!A1:Z1"; "Car name")&"  
    where "&colIndex("'MySheet'!A1:Z1"; "Car color")&"='Blue'"))

İle colIndexfonksiyonu:

function colIndex(a1NotationStr, header){
  var range = SpreadsheetApp.getActiveSpreadsheet().getRange(a1NotationStr)
  var row = range.getValues()[0]

  //parse the header row and stop at first header matching our search
  //use the related cell A1Notation and remove all numbers (i.e. 'A45' becomes 'A')
  for(var i=0; i<row.length; i++){
    var currHeader = row[i]
    if(currHeader == header){
      return range.getCell(1, i+1).getA1Notation().replace(/[0-9]/g, '');
    }  
  }
}

Hangi kullanımı ve okunması daha kolay olabilir.


0

İşte benim çözümüm:

"city" adlı bir sütununuz varsa, o hücrenin dizinini içeren yeni bir hücre oluşturun:

   A          B               C        ...         Y               Z        
 --------- ------------ ------------ ------ --------------- --------------- 
  Name        Phone        City        ...    Column Name     Column Index  
  Vidar      12345678     Oslo         ...    Name           A              
  Rupert     32165487     Berlin       ...    Phone          B              
  Sahid      32165487     Colombo      ...    City           C              

Daha sonra Z: 2 hücresi için "name", Z: 3 = "phone", Z: 4 = "city" adlı adlandırılmış bir aralık oluşturabilirsiniz.

daha sonra şunu yazabilirsiniz:

=QUERY( Sheet1!A1:C,"SELECT A, B, C where "&name&" = 'Vidar'"

Yeniden düzenlenmiş sütunları takip etmek zorunda kalmamak için bunu adres eşleme çözümü ile birleştirebilirsiniz.

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.