it-swarm.com.de

Kann ich Spaltenüberschriften in einer = QUERY verwenden?

Lesen Sie die Dokumentation für die Funktion =QUERY1 , 2 , Einige davon scheinen zu implizieren, dass ich in der Lage sein sollte, Spaltenüberschriften direkt in meiner Abfrage zu verwenden. Zum Beispiel die =QUERY -Funktion nimmt einen dritten optionalen Parameter an , HEADERS, mit der Sie eine Anzahl von Kopfzeilen angeben können.

Die meisten meiner Abfragen wären viel schöner, wenn ich Spaltenüberschriften verwenden könnte, also keine Spaltenindizes verwenden müsste, aber ich bin nicht in der Lage, dies zum Funktionieren zu bringen.

Beispiel:

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

Ich kann dies mithilfe von Spaltenindizes abfragen:

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

... aber ohne Spaltenüberschriften:

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

... das gibt mir Fehler: Ungültige Abfrage: Spalte [ Name] existiert nicht in Tabelle

Ist es überhaupt möglich, Spaltenüberschriften wie diese zu verwenden? Wenn nicht, wozu dient der Parameter HÈADERS?

14
Vidar S. Ramdal

Der dritte Parameter, von dem Sie in der Funktion QUERY sprechen, dient zur Steuerung der Header. Bei der Einstellung -1 wird in der Google-Tabelle basierend auf den verfügbaren Daten die Auswahl der Überschriften nach eigenem Ermessen getroffen: enter image description here

Ich habe folgenden Datensatz verwendet: enter image description here

Wenn 0 festgelegt ist, wird kein Header verwendet. enter image description here

Wenn 1 festgelegt ist, wird die erste Zeile verwendet. enter image description here

Bei der Einstellung 2 oder -1 oder left blank werden die ersten beiden Zeilen verwendet. enter image description here

Es ist nicht möglich, die Header so zu verwenden, wie Sie es in Ihrem Beispiel getan haben. Am nächsten wäre die Verwendung der Funktion QUERY, beschrieben in this answer. Dort wird quasi ein Spaltenname verwendet.

3

Ist es überhaupt möglich, Spaltenüberschriften wie diese zu verwenden?

Ja, es ist möglich. Zuerst müssen Sie MATCH verwenden, um die Spaltennummer der Spalte abzurufen, deren Wert mit 'Name' übereinstimmt. Dann müssen Sie ADDRESS verwenden, um die Zellreferenz zu erhalten. Schließlich müssen Sie SUBSTITUTE verwenden, um die Zeilennummer aus dem Zellbezug zu entfernen.

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

Während eines alten Beitrags wollte ich meine Lösung zum Mix hinzufügen. Sie können Spaltennamen verwenden, die ich für nützlicher halte. Auf diese Weise müssen Sie Ihre Abfragefunktionsaufrufe nicht bearbeiten, wenn Sie Spalten in die Quelldaten einfügen oder daraus entfernen.

Ich habe gesehen, dass andere das Match und das Substitute verwenden. Ich habe etwas anderes implementiert, als nur den Aufruf der Abfragefunktion.

Erstens - Erstellen Sie eine Nachschlagetabelle mit all Ihren Spaltennamen wie folgt. Meine Nachschlagetabelle beginnt in Spalte E eines "Config" -Blatts, nur weil ich andere Elemente auf dem Blatt habe, könnte es leicht in ein eigenes Blatt platziert werden.

  • Spalte 1 (Spaltenname)

    =TRANSPOSE( 'Source Data'!1:1 )
    
  • Spalte 2 (Spalte #)

    =arrayformula( row( E2:E ) - 1 )
    
  • Spalte 3 (Spaltenbuchstabe)

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

    Ich bin offen für Verbesserungen, um eine Spaltennummer in einen Buchstaben umzuwandeln. Diese Formel ist insofern begrenzt, als sie nur 78 Spalten verarbeitet. Mehr als genug für mich.

Jetzt würde Ihr Abfragefunktionsaufruf ungefähr so ​​aussehen:

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

Halten Sie es schön formatiert und es ist überhaupt nicht schlecht zu verwalten. Sie leiden nur, wenn Sie den Spaltenindex Ihres Lookup-Bereichs ändern. Dies sollte sich jedoch nicht oft, wenn überhaupt, ändern, da es sich um eine Hilfsreichweite handelt.

3
Don

Alte Frage, aber ich denke, diese Lösung kann es wert sein.

Sie können eine benutzerdefinierte Skriptfunktion verwenden, die den Spaltenindex (d. H. A, B, C ...) unter Verwendung eines Kopfnamens abruft und Folgendes ermöglicht:

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

Mit colIndex Funktion:

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, '');
    }  
  }
}

Welches kann einfacher zu bedienen und zu lesen sein.

3
Pierre B.