คุณสามารถเลือก UNION ใน Google ชีตได้หรือไม่?


10

ฉันมี Google ชีตเชื่อมโยงไปยังแบบฟอร์มที่รวบรวมคำตอบจากคนสามคนในหัวข้อเดียวกันโดยใช้แบบฟอร์มเดียวกันและแก้ไขสามครั้ง สิ่งนี้จะสร้างชีตที่มีสามคอลัมน์ที่ระบุว่าบุคคลทั้งสามอยู่ที่ไหน

ฉันต้องการสร้างมุมมอง / ข้อความค้นหาที่ใช้สามคอลัมน์เหล่านั้นและทำให้พวกเขาอยู่ภายใต้ 'กันและกัน' และไม่ติดกัน ในฐานข้อมูลฉันจะทำบางอย่างเช่นแบบสอบถามด้านล่างฉันเรียกว่า 'แผ่นงาน' tblMain ของฉันและระบุสี่คอลัมน์ที่เกี่ยวข้อง (ฉันต้องการ ID หัวเรื่อง)

tblMain:

ID        RALocation        RBLocation        RCLocation

ค้นหา:

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 ชีตหรือไม่? ฉันไม่สนใจที่จะสร้างมากกว่าหนึ่งแผ่นแล้วรวมมันในตอนท้าย แต่ฉันก็ติดอยู่กับวิธีการทำเช่นนี้


จำนวนแถวคงที่หรือเปลี่ยนแปลงตลอดเวลาหรือไม่
Rubén

คำตอบ:


3

ฉันเสนอสองรุ่นขึ้นอยู่กับว่าควรจะเก็บเซลล์ว่างไว้หรือไม่ แนวคิดพื้นฐานเหมือนกัน:

  1. เลือกตัวละครที่ไม่ได้อยู่ในตารางของคุณ (เช่นตัวละคร Unicode ที่สามารถเข้าถึงได้ผ่านทางCHAR)
  2. ใช้ในJOINคำสั่งสำหรับแต่ละคอลัมน์สามคอลัมน์
  3. เชื่อมผลลัพธ์เข้าด้วยกันโดยเพิ่มอักขระระหว่างนั้น
  4. SPLIT สตริงที่ต่อกันโดยอักขระเดียวกัน
  5. TRANSPOSE ผลลัพธ์.

ตัวอย่างเช่น:

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

ฉันเลือกตัวละครCHAR(57344)ที่กำหนดไว้สำหรับการใช้งานส่วนตัวและดังนั้นจึงไม่ควรแสดงในอินพุตที่ถูกต้อง

สูตรด้านบนจะลบรายการเปล่าเพราะนี่คือสิ่งที่SPLITทำ วิธีนี้อาจสะดวกถ้าข้อมูลของคุณไม่มีช่องว่าง: ช่วยคุณประหยัดปัญหาในการติดตามตำแหน่งของแถวสุดท้ายของข้อมูล แต่เวลาอื่นควรรักษาช่องว่าง

เพื่อรักษาช่องว่างฉันทำตามคำตอบของ Jacob Jan Tuinstraยกเว้นว่าฉันใช้ Unicode ส่วนตัวแทนการเว้นวรรค (ใครจะรู้บางทีคุณอาจมีเซลล์บางส่วนที่มีเพียงช่องว่างและคุณต้องการเก็บไว้) สิ่งนี้เกี่ยวข้องกับสองขั้นตอนเพิ่มเติม: หลังจากเข้าร่วมทุกอย่างเหมือนก่อนหน้านี้ฉันใช้SUBSTITUTEแทนที่CHAR(57344)โดยCHAR(57344)&CHAR(57345)แล้วแยกตามเดิมและแทนที่CHAR(57345)ด้วยสตริงว่าง

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

ผลลัพธ์แบบเต็มมีลักษณะดังนี้ (สังเกตว่าตอนนี้ฉันระบุตำแหน่งของแถวสุดท้ายของข้อมูล):

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

คำเตือนอีกหนึ่งรายการ: สายอักขระใน Google ชีตต้องมีความยาวไม่เกิน 50,000 อักขระ หากข้อมูลของคุณมีขนาดใหญ่เกินไปสำหรับวิธีการทำงานแบบสตริงให้ใช้สคริปต์ ( นี่เป็นจุดเริ่มต้นที่ดี)


นั่นเป็นวิธีการรักษาและฉันสามารถรวมพวกเขาเพื่อให้ได้ผลลัพธ์ที่ถูกต้อง สิ่งเดียวที่ฉันพยายามทำตอนนี้คือให้มันเคารพค่า NULL แล้วดึงมันกลับกลายเป็นว่าไม่ได้ต้องการตัวกรองของคุณมันจะพาพวกมันออกไปถ้ามันพบค่า NULL ความคิดใดที่ฉันได้รับมันเพื่อเคารพ NULL
AnneB

1
จริงๆแล้ว "คำตอบอื่น ๆ " เป็นคำตอบบางส่วนในเวลานี้ นอกจากทางเลือกอื่น ๆ ส่วนที่ขาดหายไปที่เกี่ยวข้องนั้นเป็นเรื่องเกี่ยวกับวิธีการใช้อาร์เรย์แบบฝังตัวแทนวิธีการแบบ UNION-SELECT
Rubén

2
ยอดเยี่ยม ฉันอาจจะต้องดูสคริปต์เมื่อนักบินของเราสิ้นสุดลง แต่ตอนนี้ฉันมีเพียงพอที่จะดำเนินการต่อ ผู้คนที่นี่เป็นประโยชน์จริง ๆ ขอบคุณทุกคน!
AnneB


2

คำตอบสั้น ๆ

Google ชีตเป็นเครื่องมือที่ทรงพลังมากซึ่งมีหลายทางเลือกเพื่อให้ได้ผลลัพธ์คล้ายกับ UNION-SELECT

ทางเลือก

อาร์เรย์ฝังตัว

อีกทางเลือกหนึ่งในการใช้วิธีแยก SPLIT-TRANSPOSE-JOIN-CHAR คือการใช้อาร์เรย์ที่ฝังตัว ข้อดีอย่างหนึ่งของวิธีนี้คือมันไม่จำเป็นต้องสร้าง / ถอดรหัสโครงสร้างดังนั้นการ จำกัด จำนวนอักขระที่ไม่เกี่ยวข้อง

อาร์เรย์ที่ฝังตัว

กรอง

ด้านบนสามารถใช้ร่วมกับFILTER ()สำหรับกรณีเหล่านั้นที่ต้องการการกรองเพื่อให้มีพฤติกรรมที่คล้ายกันของ UNION-SELECT ตัวอย่าง

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

สามารถใช้ร่วมกับQUERY () ได้แต่ผลลัพธ์จะมีบรรทัดส่วนหัว หากต้องการเรียนรู้เกี่ยวกับวิธีการกำจัดส่วนหัวดูกำจัดแถวในผลของการค้นหาของ Google Spreadsheets

วิธีสร้างคอลัมน์ของค่า

ใช้ TRANSPOSE-SPLIT-REPT เพื่อสร้างคอลัมน์ของค่า

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

นอกจากนี้ QUERY () สามารถใช้ในการสร้างคอลัมน์ของค่าได้ แต่การลบแถวส่วนหัวอาจทำให้สูตรซับซ้อนขึ้น ใช้เฉพาะเมื่อข้อจำกัดความยาวของสตริงทำให้เกิดปัญหา

วิธีการแก้ปัญหาโดยใช้อาร์เรย์ในตัวและ TRANSPOSE-SPLIT-REPT

สมมติว่าช่วง tblMain คือ A1: D7 โดยที่ A1: D1 เป็นส่วนหัวของตารางและข้อมูลอยู่ใน A2: D7

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

อ้างอิง

ผนวกอาร์เรย์สเปรดชีตของ Google - StackOverflow


คุณต้องอ่านคำตอบเพิ่มเติมจากฉัน;) ฉันยังไม่พบบทความช่วยเหลืออย่างเป็นทางการเกี่ยวกับเรื่องนี้ ฉันรู้ว่ามีกระทู้ในฟอรัมผลิตภัณฑ์ Google และในอินเทอร์เน็ตเช่นการอ้างอิงที่ฉันได้รวมไว้แล้ว
Rubén

ขอบคุณสำหรับสิ่งนี้ฉันกำลังดูทางออกสุดท้ายฉันคิดว่ามันจะเป็นประโยชน์อย่างมากสำหรับนักบินของเรา!
AnneB
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.