क्या मैं एक = 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फ़ंक्शन में बोलते हैं , हेडर को नियंत्रित करने के लिए है। यदि सेट किया जाना है -1, तो Google स्प्रेडशीट उपलब्ध आंकड़ों के आधार पर हेडर चुनने में अपनी पसंद का चित्रण करेगी: यहाँ छवि विवरण दर्ज करें

मैंने निम्नलिखित डेटा सेट का उपयोग किया है: यहाँ छवि विवरण दर्ज करें

यदि सेट किया जाता है 0, तो कोई हेडर का उपयोग नहीं किया जाएगा, छोड़कर: यहाँ छवि विवरण दर्ज करें

यदि सेट किया जाता है 1, तो पहली पंक्ति का उपयोग किया जाएगा, छोड़कर: यहाँ छवि विवरण दर्ज करें

सेट होने के लिए, तो 2या -1या left blankहै, तो पहले दो पंक्तियों में इस्तेमाल किया जाएगा, छोड़ने: यहाँ छवि विवरण दर्ज करें

हेडर का उपयोग करना, आपके द्वारा अपने उदाहरण में किया गया तरीका संभव नहीं है। इस उत्तर QUERYमें वर्णित फ़ंक्शन का उपयोग निकटतम चीज़ होगी । वहाँ एक अर्ध स्तंभ नाम का उपयोग किया जाता है।


आह, ठीक है, तो यदि HEADERS > 0हेडर पंक्तियों की संख्या =QUERYक्वेरी परिणामों के शीर्ष पर वापस आ जाएगी , है ना? यह समझ में आता है - मैंने सोचा था कि HEADERSकेवल निर्दिष्ट पंक्तियों को क्वेरी में अनदेखा करना है।
विदर्भ एस। रामदल

@ विडर OFFSETविकल्प का उपयोग पहली पंक्तियों को अनदेखा करने के लिए किया जा सकता है।
जैकब जान टुंस्ट्रा

मेरे अनुभव में हेडर पैरामीटर को 0 पर सेट करने से Google डॉक्स का वर्णन नहीं करता है या यहाँ क्या दर्शाया गया है। यह मूल रूप से कुछ भी नहीं करता है (यानी, जैसा कि -1) जहां तक ​​मैं बता सकता हूं। क्या किसी ने भी इस पर गौर किया?
user24601

1
मेरा मानना ​​है कि मूल पोस्टर का इरादा रिपोर्ट में हेडर प्राप्त करने के बारे में नहीं था, बल्कि कॉलम इंडेक्स (ए या बी या सी के रूप में) का उपयोग करने के बजाय क्वेरी स्टेटमेंट में हेडर नामों का उपयोग करने के बारे में था।
१६:५० पर Farrel

7

क्या इस तरह से कॉलम हेडर का उपयोग करना संभव है?

हाँ यह संभव है। सबसे पहले, आपको स्तंभ का कॉलम नंबर प्राप्त करने के लिए MATCH का उपयोग करने की आवश्यकता है, जिसका मान 'नाम' से मेल खाता है। फिर आपको सेल संदर्भ प्राप्त करने के लिए 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( '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

पुराना सवाल है, लेकिन मुझे लगता है कि यह समाधान इसके लायक हो सकता है।

आप एक कस्टम स्क्रिप्ट फ़ंक्शन का उपयोग कर सकते हैं, जो एक हेडर नाम का उपयोग करके कॉलम इंडेक्स (जैसे ए, बी, सी ...) प्राप्त करने की अनुमति देता है:

=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

यहाँ मेरा समाधान है:

यदि आपके पास "शहर" नामक एक कॉलम है, तो उस सेल के सूचकांक के साथ कहीं एक नया सेल बनाएं:

   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              

फिर आप सेल जेड: 2 के लिए एक नामित सीमा बना सकते हैं: "नाम", जेड: 3 = "फोन", जेड: 4: "फोन"

अपनी क्वेरी में आप तब लिख सकते हैं:

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

आप इसे पता मैच समाधान के साथ जोड़ सकते हैं, पुनर्व्यवस्थित कॉलम का ट्रैक रखने के लिए नहीं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.