= QUERY에서 열 헤더를 사용할 수 있습니까?


16

=QUERY함수 1 , 2 , 3에 대한 문서를 읽으면 일부 쿼리에서 열 머리글을 직접 사용할 수 있어야 함을 의미합니다. 예를 들어, =QUERY함수 는 세 번째 선택적 매개 변수HEADERS을 사용하여 여러 헤더 행을 지정할 수 있습니다.

열 헤더를 사용할 수 있으면 열 인덱스를 사용할 필요가 없지만 대부분의 쿼리는 훨씬 더 예쁘지 만 작동시킬 수는 없습니다.

예:

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

열 인덱스를 사용하여 이것을 쿼리 할 수 ​​있습니다.

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

...하지만 열 헤더를 사용하지 않습니다 :

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

...이 오류가 발생합니다. 잘못된 쿼리 : [이름] 열이 테이블에 없습니다.

이처럼 열 머리글을 사용할 수 있습니까? 그렇지 않은 경우 HÈADERS매개 변수 의 목적은 무엇 입니까?

답변:


4

QUERY함수 에서 말한 세 번째 매개 변수 는 헤더를 제어하기위한 것입니다. 로 설정된 경우 -1Google 스프레드 시트는 사용 가능한 데이터를 기반으로 헤더를 선택할 때 자신의 선택을 나타냅니다. 여기에 이미지 설명을 입력하십시오

다음 데이터 세트를 사용했습니다. 여기에 이미지 설명을 입력하십시오

로 설정하면 0헤더가 사용되지 않고 다음과 같이 남습니다. 여기에 이미지 설명을 입력하십시오

로 설정 1하면 첫 번째 행이 사용되며 다음과 같이 남습니다. 여기에 이미지 설명을 입력하십시오

2or -1또는로 설정 left blank하면 처음 두 행이 사용되며 다음과 같이 남습니다. 여기에 이미지 설명을 입력하십시오

예제에서와 같이 헤더를 사용하는 것은 불가능합니다. 가장 가까운 것은 답변에 QUERY설명 된 함수 사용법입니다 . 준 열 이름이 사용됩니다.


아, 좋습니다. 그렇다면 HEADERS > 0주어진 수의 헤더 행이 =QUERY쿼리 결과 위에 반환됩니다 . 그것은 의미가 있습니다- HEADERS쿼리에서 무시하도록 지정된 행만 생각했습니다 .
Vidar S. Ramdal 2012

@Vidar이 OFFSET옵션은 첫 번째 행을 무시하는 데 사용할 수 있습니다.
Jacob Jan Tuinstra

내 경험상 headers 매개 변수를 0으로 설정하면 Google 문서가 설명하거나 여기에 묘사 된 내용을 수행하지 않습니다. 기본적 으로 내가 알 수있는 한 아무것도 하지 않습니다 (즉, -1과 동일). 다른 사람이 이것을 알아 차렸습니까?
user24601

1
원래 포스터의 의도는 보고서에 헤더를 가져 오는 것이 아니라 열 인덱스를 사용하지 않고 쿼리 문에서 헤더 이름을 사용하는 것이 아니라고 생각합니다 (A 또는 B 또는 C에서와 같이).
Farrel

7

이처럼 열 머리글을 사용할 수 있습니까?

네 가능합니다. 먼저, MATCH를 사용하여 값이 'Name'과 일치하는 열의 열 번호를 가져와야합니다. 그런 다음 ADDRESS를 사용하여 셀 참조를 가져와야합니다. 마지막으로 셀 참조에서 행 번호를 제거하려면 SUBSTITUTE를 사용해야합니다.

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

3

오래된 게시물 인 동안 솔루션에 믹스를 추가하고 싶었습니다. 더 유용하다고 생각되는 열 이름을 사용할 수 있습니다. 이렇게하면 소스 데이터에서 열을 삽입하거나 제거 할 때 쿼리 함수 호출을 편집 할 필요가 없습니다.

나는 다른 사람들이 일치와 대체를 사용하는 것을 보았고 단순히 쿼리 함수 호출과 약간 다른 것을 구현했습니다.

먼저-이와 같은 모든 열 이름의 룩업 테이블을 만듭니다. 룩업 테이블은 시트에 다른 항목이 있기 때문에 '구성'시트의 열 E에서 시작하여 쉽게 자체 시트에 배치 할 수 있습니다.

  • 열 1 (열 이름)

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

    =arrayformula( row( E2:E ) - 1 )
    
  • 열 3 (열 문자)

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

    열 번호를 문자로 변환하기 위해 구체화가 열려 있습니다. 이 수식은 78 개의 열만 처리한다는 점에서 제한됩니다. 그래도 충분합니다.

이제 Query 함수 호출은 다음과 같습니다.

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

좋은 형식으로 유지하고 관리하는 것은 나쁘지 않습니다. vlookup 범위의 열 인덱스를 변경하면 문제가 발생합니다. 그러나 이것이 도우미 범위라는 점을 고려하면 전혀 바뀌지 않아야합니다.


3

오래된 질문이지만이 솔루션이 가치가 있다고 생각합니다.

헤더 이름을 사용하여 열 인덱스 (예 : A, B, C ...)를 검색하는 다음과 같은 작업을 수행 할 수있는 사용자 지정 스크립트 함수를 사용할 수 있습니다.

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

colIndex기능 :

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

사용하기 쉽고 읽기 쉽습니다.


0

내 해결책은 다음과 같습니다.

"city"라는 열이 있으면 해당 셀의 색인이있는 새 셀을 작성하십시오.

   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              

그런 다음 "name", Z : 3 = "phone", Z : 4 = "city"라는 셀 Z : 2에 대해 명명 된 범위를 만들 수 있습니다.

쿼리에서 다음을 작성할 수 있습니다.

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

재정렬 된 열을 추적 할 필요가 없도록 이것을 주소 일치 솔루션과 결합 할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.