Thep Excel

Table.NestedJoin – รวมตารางพร้อมสร้างคอลัมน์ตารางย่อย

Table.NestedJoin เชื่อมตารางสองตารางด้วยคีย์ที่กำหนด และสร้างคอลัมน์ใหม่ที่เก็บตารางย่อยของแถวที่จับคู่ได้ เหมาะกับงาน Merge ที่ต้องการเก็บรายละเอียดฝั่งขวาไว้เป็น nested table ก่อนจะ Expand หรือทำขั้นตอนต่อ

=Table.NestedJoin(table1 as table, key1 as any, table2 as any, key2 as any, newColumnName as text, optional joinKind as nullable number, optional keyEqualityComparers as nullable list) as table

By ThepExcel AI Agent
3 December 2025

Function Metrics


Popularity
8/10

Difficulty
5/10

Usefulness
9/10

Syntax & Arguments

=Table.NestedJoin(table1 as table, key1 as any, table2 as any, key2 as any, newColumnName as text, optional joinKind as nullable number, optional keyEqualityComparers as nullable list) as table

Argument Type Required Default Description
table1 table Yes ตารางหลัก (ฝั่งซ้าย) ที่ต้องการคงแถวไว้ตามชนิดการ join
key1 any Yes คอลัมน์คีย์ของ table1 ระบุเป็นชื่อคอลัมน์หรือ list ของชื่อคอลัมน์
table2 any Yes ตารางที่ต้องการเชื่อม (ฝั่งขวา) ซึ่งจะถูกจับคู่แล้วเก็บเป็นตารางย่อย
key2 any Yes คอลัมน์คีย์ของ table2 ให้ตรงกับ key1 (จำนวนคอลัมน์ต้องเท่ากัน)
newColumnName text Yes ชื่อคอลัมน์ใหม่ที่จะเก็บตารางย่อยของข้อมูลที่เชื่อมได้
joinKind nullable number Optional JoinKind.LeftOuter ชนิดการเชื่อม เช่น JoinKind.LeftOuter, JoinKind.Inner, JoinKind.FullOuter ค่าเริ่มต้นคือ LeftOuter
keyEqualityComparers nullable list Optional null รายการ comparer สำหรับเทียบคีย์แต่ละคอลัมน์ ใช้เฉพาะกรณีพิเศษ เช่น case-insensitive

How it works

Merge ตารางอ้างอิงเพื่อเติมรายละเอียด

เชื่อมตารางธุรกรรมกับตารางอ้างอิง (เช่น สินค้า ลูกค้า) แล้วค่อย Expand เพื่อดึงข้อมูลเพิ่ม

เก็บข้อมูลฝั่งขวาเป็นตารางย่อย

เหมาะเมื่ออยากเก็บหลายรายการที่จับคู่กันไว้ในคอลัมน์เดียวก่อน แล้วค่อยเลือกวิธีจัดการภายหลัง

ควบคุมชนิดการเชื่อมอย่างชัดเจน

กำหนด joinKind เพื่อเลือกผลลัพธ์แบบ Inner/Left/Right/Full ให้ตรงกับโจทย์

Examples

ตัวอย่างที่ 1: Left Outer Join (ค่าเริ่มต้น)
let Calls = Table.FromRecords({ [CustomerToCall = 1], [CustomerToCall = 3] }), Customers = Table.FromRecords({ [CustomerID = 1, Name = "Bob", Phone = "123-4567"…
ไม่ระบุ joinKind จะใช้ LeftOuter อัตโนมัติ ทำให้ทุกแถวของ Calls ถูกเก็บไว้ และ CustomerDetails มีข้อมูลเฉพาะแถวที่จับคู่ได้
Power Query Formula:

let
    Calls = Table.FromRecords({
        [CustomerToCall = 1],
        [CustomerToCall = 3]
    }),
    Customers = Table.FromRecords({
        [CustomerID = 1, Name = "Bob", Phone = "123-4567"],
        [CustomerID = 2, Name = "Jim", Phone = "987-6543"],
        [CustomerID = 3, Name = "Paul", Phone = "543-7890"]
    }),
    Joined = Table.NestedJoin(
        Calls,
        {"CustomerToCall"},
        Customers,
        {"CustomerID"},
        "CustomerDetails"
    )
in
    Joined

Result:

Table ที่มี CustomerToCall และคอลัมน์ CustomerDetails เป็นตารางย่อยของข้อมูลที่จับคู่ได้

ตัวอย่างที่ 2: Inner Join
let Orders = Table.FromRecords({ [OrderID = 1, CustomerID = 10], [OrderID = 2, CustomerID = 20] }), Customers = Table.FromRecords({ [CustomerID = 10, Name = "An…
Inner Join จะเก็บเฉพาะแถวที่จับคู่ได้ทั้งสองฝั่ง ทำให้ OrderID=2 ถูกตัดออก
Power Query Formula:

let
    Orders = Table.FromRecords({
        [OrderID = 1, CustomerID = 10],
        [OrderID = 2, CustomerID = 20]
    }),
    Customers = Table.FromRecords({
        [CustomerID = 10, Name = "Ann"],
        [CustomerID = 30, Name = "Ken"]
    }),
    Joined = Table.NestedJoin(
        Orders,
        {"CustomerID"},
        Customers,
        {"CustomerID"},
        "Customer",
        JoinKind.Inner
    )
in
    Joined

Result:

Table เหลือเฉพาะ OrderID=1 ที่มี CustomerID ตรงกัน

ตัวอย่างที่ 3: Join ด้วยหลายคอลัมน์
let Sales = Table.FromRecords({ [Region = "North", StoreID = 1, Amount = 100], [Region = "South", StoreID = 2, Amount = 200] }), StoreInfo = Table.FromRecords({…
การส่งคีย์เป็น list ช่วยให้ join หลายคอลัมน์ได้แม่นยำขึ้น ป้องกันการจับคู่ผิด
Power Query Formula:

let
    Sales = Table.FromRecords({
        [Region = "North", StoreID = 1, Amount = 100],
        [Region = "South", StoreID = 2, Amount = 200]
    }),
    StoreInfo = Table.FromRecords({
        [Region = "North", StoreID = 1, Manager = "A"],
        [Region = "North", StoreID = 2, Manager = "B"]
    }),
    Joined = Table.NestedJoin(
        Sales,
        {"Region", "StoreID"},
        StoreInfo,
        {"Region", "StoreID"},
        "StoreDetail",
        JoinKind.LeftOuter
    )
in
    Joined

Result:

Table ที่ได้ StoreDetail เป็นตารางย่อยเฉพาะแถวที่ Region และ StoreID ตรงกัน

ตัวอย่างที่ 4: เทียบคีย์แบบไม่สนตัวพิมพ์ใหญ่เล็ก
let Left = Table.FromRecords({ [Code = "ab-01"], [Code = "CD-02"] }), Right = Table.FromRecords({ [Code = "AB-01", Value = 10], [Code = "cd-02", Value = 20] }),…
กำหนด keyEqualityComparers เป็น list ของ Comparer เพื่อควบคุมการเทียบคีย์ เช่น case-insensitive ใช้เฉพาะกรณีพิเศษเท่านั้น
Power Query Formula:

let
    Left = Table.FromRecords({
        [Code = "ab-01"],
        [Code = "CD-02"]
    }),
    Right = Table.FromRecords({
        [Code = "AB-01", Value = 10],
        [Code = "cd-02", Value = 20]
    }),
    Joined = Table.NestedJoin(
        Left,
        {"Code"},
        Right,
        {"Code"},
        "Match",
        JoinKind.LeftOuter,
        {Comparer.OrdinalIgnoreCase}
    )
in
    Joined

Result:

Table ที่จับคู่ Code ได้แม้ตัวพิมพ์ใหญ่เล็กไม่ตรงกัน

FAQs

Table.NestedJoin ต่างจาก Table.Join อย่างไร?

Table.NestedJoin คืนคอลัมน์เป็นตารางย่อย ส่วน Table.Join จะขยายคอลัมน์จากอีกตารางทันที เหมาะคนละสถานการณ์

ต้องขยายคอลัมน์ผลลัพธ์อย่างไร?

ใช้ Table.ExpandTableColumn เพื่อเลือกคอลัมน์จากตารางย่อยมาแสดงในตารางหลัก

ถ้ามีหลายแถวที่จับคู่ได้จะเกิดอะไรขึ้น?

ตารางย่อยในคอลัมน์ผลลัพธ์จะเก็บทุกแถวที่จับคู่ได้ ไม่ได้จำกัดแค่แถวแรก

ค่าเริ่มต้นของ joinKind คืออะไร?

ถ้าไม่ระบุ joinKind จะใช้ JoinKind.LeftOuter ซึ่งเก็บทุกแถวจากตารางซ้ายไว้

Resources & Related

Additional Notes

Table.NestedJoin ใช้เชื่อมตารางสองตารางด้วยคีย์ที่กำหนด แล้วสร้างคอลัมน์ใหม่เป็นตารางย่อย (nested table) ของข้อมูลที่จับคู่กันได้ ผลลัพธ์คล้ายการ Merge Queries ใน Power Query แต่จุดเด่นคือได้คอลัมน์ที่ยังเป็นตารางอยู่ เพื่อให้คุณเลือกว่าจะขยาย (Expand) หรือทำขั้นตอนต่อได้ยืดหยุ่น

สิ่งที่ควรรู้ก่อนใช้

  • คีย์ที่ใช้เชื่อมสามารถเป็นคอลัมน์เดียวหรือหลายคอลัมน์ (ส่งเป็น list)
  • ผลลัพธ์จะได้คอลัมน์ตารางย่อย ต้องใช้ Table.ExpandTableColumn เพื่อกระจายคอลัมน์
  • ค่าเริ่มต้นของ joinKind คือ JoinKind.LeftOuter
  • keyEqualityComparers ใช้กำหนดวิธีเทียบคีย์ (มักใช้เฉพาะกรณีพิเศษ)

ขั้นตอนการใช้งานทั่วไป

  1. เตรียมตารางหลักและตารางที่ต้องการเชื่อม
  2. กำหนดคอลัมน์คีย์ทั้งสองฝั่งให้ตรงกัน
  3. ตั้งชื่อคอลัมน์ผลลัพธ์ (newColumnName)
  4. ถ้าต้องการผลลัพธ์แบบแบน ให้ใช้ Table.ExpandTableColumn ต่อ

Leave a Reply

Your email address will not be published. Required fields are marked *