Day: June 11, 2018

  • สร้าง Barcode แบบง่ายๆ ด้วย Word

    ถ้าพูดถึงการสร้าง Barcode ในปัจจุบันก็จะมีมากมายหลายวิธี แล้วแต่เราจะเลือกใช้ แต่สำหรับ Blog นี้ผู้เขียนจะขอแนะนำการสร้าง Barcode แบบง่ายๆ ใช้เวลาไม่นาน โดยที่เราไม่ต้องเพิ่มโปรแกรมเสริม หรือใช้โปรแกรมอื่นๆ เข้ามาช่วยเลย ขอแค่มี Microsoft Word version 2013 หรือ 2016 ในเครื่อง … เท่านี้ก็เพียงพอแล้ว 🙂

     

    มาทำความรู้จัก ระบบบาร์โค้ด (Barcode System) กันหน่อย 

    ระบบบาร์โค้ด หมายถึงการใช้สัญลักษณ์บาร์โค้ดบ่งชี้ไปยังข้อมูลตัวเลขหรือตัวอักษร และประยุกต์ต่อยอด โดยการนำตัวเลขหรือตัวอักษรเหล่านั้นบ่งชี้ไปยังสิ่งต่างๆ เช่น สินค้า (Product), วันหมดอายุ (Expiration date), บุคคล (Person), URL Website เป็นต้น ซึ่งจะมี 2 ประเภทหลักคือ 1 Dimension และแบบ 2 Dimension

     

    *สำหรับคำสั่งในการสร้างบาร์โค้ด DISPLAYBARCODE ใน Blog นี้ที่เราจะพูดถึงนั้น จะรองรับบาร์โค้ดแบบต่างๆ ดังนี้ QR, CODE128, CODE39, JPPOST, EAN, JAN, UPC, ITF14, NW7, CASE

     

    ขั้นตอนที่ 1 : เปิดโปรแกรม Word ขึ้นมา

     

     

     

     

     

     

     

     

     

     

     

    ขั้นตอนที่ 2 : กดปุ่ม Ctrl + F9 จากนั้นเราก็จะเห็นวงเล็กปิดเปิดเพิ่มเข้ามาใน Word ของเรา

     

     

     

     

     

     

     

     

     

     

     

    ขั้นตอนที่ 3 : พิมพ์คำสั่งตาม DISPLAYBARCODE ลงไปในวงเล็บ ตัวอย่างคำสั่งเช่น

    DISPLAYBARCODE “https://sis.psu.ac.th” QR \q 3

     

     

     

     

     

     

     

     

    ขั้นตอนที่ 4 : จากนั้นคลิก Alt + F9 เพื่อดูผลลัพธ์ แท่น แท๊นนน เท่านี้ก็เสร็จเรียบร้อย

     

     

     

     

     

     

     

     

     

     

     

    *ขออธิบายความหมายของแต่ละส่วนในคำสั่งสักนิดนึง เพื่อให้ผู้ใช้ได้เข้าใจง่ายขึ้น สำหรับส่วนแรก

     

    DISPLAYBARCODE   — คือคำสั่งที่เราจะใช้

    “https://sis.psu.ac.th” — เป็นข้อมูลที่เราจะใส่ในบาร์โค้ด ให้ใส่ไว้ภายในเครื่องหมาย ” ”

    QR — เป็นคำสั่งที่ระบุว่าสร้างบาร์โค้ดแบบ QR หากต้องการแบบอื่นเช่น CODE128 ก็เปลี่ยนได้

    โดยให้อิงตามรหัสบาร์โค้ดที่รองรับ

    \q 3  — เป็นการกำหนด Error correction level สำหรับใน QR code เท่านั้น

    หมายเหตุ : ระดับการแก้ไขข้อผิดพลาดของข้อมูล (Error Correction Level) คือ ความสามารถในการกู้คืนข้อมูลที่เสียหาย สามารถกำหนดได้ 4 ระดับ ดังนี้ L=7%, M=15%, Q=25%, H=30% ซึ่งการกำหนดในระดับที่สูงขึ้นจะมีผลทำให้ขนาดของ QR Code เพิ่มขึ้น

     

    เป็นยังไงกันบ้างเอ่ย ง่ายๆ ไม่กี่ขั้นตอนเองใช่มั้ย สำหรับ Blog นี้ผู้เขียนก็จะนำเสนอแบบสั้นๆ ง่ายๆ แต่หากผู้ใช้ท่านไหนต้องการศึกษาแบบละเอียด อย่างลึกซึ้งในส่วนอื่นๆเพิ่มเติมก็สามารถศึกษาเพิ่มเติมหรือดู syntax ได้ที่ MSDN.MICORSOFT

    เจอกันใหม่รอบ TOR หน้าเน้อผู้อ่านทุกคน แฮ่ …

    ขอขอบคุณแหล่งข้อมูลอ้างอิง

    • https://msdn.microsoft.com/en-us/library/hh745901%28v=office.12%29.aspx?f=255&MSPPError=-2147217396
    • https://www.scandit.com/types-barcodes-choosing-right-barcode/
  • Oracle / PLSQL: LISTAGG Function

    LISTAGG เป็นฟังก์ชันการรวมสตริงของ Oracle ที่นำค่าข้อมูลในคอลัมภ์ที่ระบุมาเรียงต่อกัน และดำเนินการจัดเรียงลำดับของข้อมูลที่นำมาต่อกันตามคอลัมภ์ใน order_by_clause ซึ่งฟังก์ชัน LISTAGG สามารถแสดงผลได้หลายรูปแบบดังนี้

    • Single-set aggregate function : LISTAGG เป็นฟังก์ชันที่ดำเนินการกับข้อมูลแล้วคืนค่ากลับมาเพียงเร็คคอร์ดเดียว
    • Group-set aggregate function : LISTAGG เป็นฟังก์ชันที่ดำเนินการกับข้อมูลและคืนค่ากลับมาหลายเร็คคอร์ดตามกลุ่มที่กำหนดในเงื่อนไข GROUP BY 
    • Analytic function : LISTAGG เป็นฟังก์ชันที่ดำเนินการจัดแยกผลการค้นหาออกเป็นกลุ่มตามเงื่อนไขที่กำหนดใน query_partition_clause

    Syntax

    LISTAGG (measure_column [, 'delimiter'])
      WITHIN GROUP (order_by_clause) [OVER (query_partition_clause)]

    โดยที่ 

    • measure_column คือ คอลัมภ์ที่ต้องการนำค่าข้อมูลมาเรียงต่อกัน โดยจะดำเนินเฉพาะค่าที่ไม่เป็น null เท่านั้น
    • delimiter คือ ตัวเลือกที่ให้สามารถระบุตัวคั่นระหว่างค่าข้อมูลที่จะนำมาเรียงต่อกัน
    • order_by_clause คือ ค่าที่นำมาเรียงต่อกันจะเรียงตามค่าในคอลัมภ์ที่กำหนดใน order_by_clause

     

    ตัวอย่างการใช้งาน 

    สมมติเรามีข้อมูลคะแนนภาษาอังกฤษของนักศึกษาใหม่ซึ่งประกอบด้วย 6 ฟิลด์ข้อมูลแสดงดังตัวอย่างด้านล่าง
    ข้อมูล: ตาราง TEST_NEW_STUDENT เป็นตัวอย่างข้อมูลคะแนนภาษาอังกฤษของนักศึกษาใหม่จำนวน 16 รายการ

    Single-set aggregate function

    ตัวอย่างในส่วนนี้จะแสดงชื่อ-นามสกุลนักศึกษาทุกคนที่อยู่ในคณะ ’06’ โดยจัดเรียงลำดับข้อมูลตามชื่อนักศึกษา(stud_name_thai)

    SELECT LISTAGG (stud_name_thai || ‘ ‘ || stud_sname_thai, ‘,’)
    WITHIN GROUP (ORDER BY stud_name_thai) “NAME LIST”
    FROM test_new_student
    WHERE fac_id = ’06’;

    ผลลัพธ์ที่ได้ : จะคืนค่ากลับมาเพียงเร็คคอร์ดเดียวตามเงือนไขที่ระบุ

    Group-set aggregate function 

    ตัวอย่างในส่วนนี้จะแสดงชื่อ-นามสกุลนักศึกษาทุกคนแยกตามคณะที่สังกัด โดยจัดเรียงลำดับข้อมูลตามชื่อนักศึกษา(stud_name_thai)

    SELECT fac_id,LISTAGG (stud_name_thai || ‘ ‘ || stud_sname_thai, ‘,’)
    WITHIN GROUP (ORDER BY stud_name_thai) “NAME LIST”
    FROM test_new_student
    GROUP BY fac_id
    ORDER BY fac_id;

    ผลลัพธ์ที่ได้ : จะคืนค่ากลับมาหลายเร็คคอร์ดตามเงื่อนไข GROUP BY

    Analytic function

    ตัวอย่างในส่วนนี้จะแสดงข้อมูลเฉพาะคนที่ได้คะแนนมากกว่า 60 และจัดแยกผลการค้นหาตามคณะที่สังกัด

    SELECT fac_id,stud_name_thai||’ ‘||stud_sname_thai student_name,eng_score,
    LISTAGG (stud_name_thai||’ ‘||stud_sname_thai, ‘,’)
    WITHIN GROUP (ORDER BY eng_score, stud_name_thai)
    OVER (PARTITION BY fac_id) AS “NAME_LIST”
    FROM test_new_student
    WHERE eng_score > 60
    ORDER BY fac_id, eng_score

    ผลลัพธ์ที่ได้ : ดำเนินการจัดแยกผลการค้นหาออกเป็นกลุ่มตามเงื่อนไขที่กำหนดใน PARTITION BY 

  • Oracle : ROLLUP Extension to GROUP BY

    การจัดกลุ่มข้อมูลด้วย GROUP BY

    เมื่อต้องการจัดกลุ่มข้อมูล เราสามารถใช้ประโยค GROUP BY เพื่อทำการแบ่งออกเป็นรายการย่อย ๆ การคิวรีที่รวมประโยค GROUP BY จะเรียกว่าการคิวรีแบบกลุ่ม เพราะว่ามันจะรวมกลุ่มข้อมูลจากคำสั่ง SELECT แล้วสร้างเป็นเร็คคอร์ดสรุปเพียงเร็คคอร์ดเดียวให้กับแต่ละกลุ่ม 

    ส่วนขยาย ROLLUP 

    ในการคิวรีข้อมูลเราสามารถค้นหาแถวข้อมูลผลรวมของแต่ละกลุ่ม รวมถึงสรุปผลรวมที่มาจากผลลัพธ์ทั้งหมดในตอนท้ายของการคิวรีอีกทีได้ โดยใช้ส่วนขยายที่เรียกว่า ROLLUP ซึ่งมีรูปแบบการใช้งานดังนี้

    ROLLUP Syntax

    SELECT…GROUP BY ROLLUP(grouping_column_reference_list)

    ตัวอย่างการใช้งาน

    สมมติเรามีข้อมูลคะแนนภาษาอังกฤษของนักศึกษาใหม่ซึ่งประกอบด้วย 6 ฟิลด์ข้อมูลแสดงดังตัวอย่างด้านล่าง
    ข้อมูล: ตาราง TEST_NEW_STUDENT เป็นตัวอย่างข้อมูลคะแนนภาษาอังกฤษของนักศึกษาใหม่จำนวน 16 รายการ

    โจทย์ เราต้องการนับจำนวนนักศึกษาใหม่แยกตามคณะที่นักศึกษาสังกัด และรหัส สน.ที่สอบได้ เราสามารถใช้ประโยค GROUP BY เพื่อแก้ปัญหาข้อนี้ ดังตัวอย่างคิวรีต่อไปนี้

    SELECT fac_id, sn_code, COUNT (*) NUM_STUDENT
    FROM test_new_student
    GROUP BY fac_id, sn_code
    ORDER BY fac_id, sn_code;

    ผลลัพธ์ที่ได้ : แสดงจำนวนนักศึกษาแยกตามคณะที่สังกัด และรหัส สน.ที่สอบได้ แสดงเรียงตามรหัสคณะ และรหัส สน.ที่สอบได้

    โจทย์ หากเราต้องการนับจำนวนนักศึกษาใหม่แยกตามคณะที่นักศึกษาสังกัด และรหัส สน.ที่สอบได้ พร้อมทั้งแสดงผลรวมของนักศึกษาแต่ละคณะ และหาผลรวมของนักศึกษาทั้งหมดด้วย

    เราสามารถใช้ส่วนขยายที่เรียกว่า ROLLUP เพื่อแก้ปัญหาข้อนี้ ดังตัวอย่างคิวรีต่อไปนี้

    SELECT fac_id, sn_code, COUNT (*) NUM_STUDENT
    FROM test_new_student
    GROUP BY ROLLUP (fac_id, sn_code)
    ORDER BY fac_id, sn_code;

    ผลลัพธ์ที่ได้ : แสดงจำนวนนักศึกษาแยกตามคณะที่สังกัด และรหัส สน.ที่สอบได้ แสดงเรียงตามรหัสคณะ และผลรวมของนักศึกษาแต่ละคณะ และผลรวมนักศึกษาทั้งหมด

    ลองใช้งานกันดูนะคะ  สำหรับส่วนขยาย ROLLUP เพื่อหาสรุปผลรวมที่มาจากผลลัพธ์ทั้งหมดในตอนท้ายของการคิวรี