กันลืม!!
การเขียนโปรแกรมบางครั้งก็มีกรณีที่ไม่คาดคิดเกิดขึ้นได้
ในกรณีนี้ผมได้แก้ไขรายงานหน้าหนึ่งซึ่งเป็นกลุ่มเอกสารที่มีการจ่ายประเภทเดียวเท่านั้น
แต่พอลองทดสอบดูก็พบว่าผลรวมผิด เพราะมีกรณีที่กลุ่มเอกสารนั้นๆ มีหลายประเภทจะเกิดการวนลูปผลรวมเกินจำนวนจริง
ก็เลยต้องมาค้นหารายการในฐานขอมูลเพื่อเลือกทดสอบข้อมูลที่มีการเบิกจ่ายหลายประเภทลองมาดูกันครับ ว่าจะใช้คำสั่ง SQL ฟังก์ชั่นไหนกันบ้าง
นับจำนวนรายการของกลุ่มเอกสารแต่ละรหัส
นับเฉพาะจำนวนประเภท (ไม่ซ้ำ)
แสดงข้อมูลประเภททั้งหมดในกลุ่มนี้
แสดงข้อมูลประเภทโดยไม่ซ้ำ
เลือกแสดงเฉพาะรายการ ที่มีข้อมูลประเภทซ้ำกันมากกว่า 1 รหัส
การเขียนโปรแกรมบางครั้งก็มีกรณีที่ไม่คาดคิดเกิดขึ้นได้
ในกรณีนี้ผมได้แก้ไขรายงานหน้าหนึ่งซึ่งเป็นกลุ่มเอกสารที่มีการจ่ายประเภทเดียวเท่านั้น
แต่พอลองทดสอบดูก็พบว่าผลรวมผิด เพราะมีกรณีที่กลุ่มเอกสารนั้นๆ มีหลายประเภทจะเกิดการวนลูปผลรวมเกินจำนวนจริง
ก็เลยต้องมาค้นหารายการในฐานขอมูลเพื่อเลือกทดสอบข้อมูลที่มีการเบิกจ่ายหลายประเภทลองมาดูกันครับ ว่าจะใช้คำสั่ง SQL ฟังก์ชั่นไหนกันบ้าง
นับจำนวนรายการของกลุ่มเอกสารแต่ละรหัส
SELECT id_doc_group, id_type_pay, COUNT(*)
FROM `my_table`
WHERE LENGTH(id_doc_group) > 4
GROUP by id_doc_group
นับเฉพาะจำนวนประเภท (ไม่ซ้ำ)
SELECT id_doc_group, id_type_pay, COUNT( DISTINCT id_type_pay)
FROM `my_table`
WHERE LENGTH(id_doc_group) > 4
GROUP by id_doc_group
แสดงข้อมูลประเภททั้งหมดในกลุ่มนี้
SELECT id_doc_group, GROUP_CONCAT(id_type_pay), COUNT( DISTINCT id_type_pay)
FROM `my_table`
WHERE LENGTH(id_doc_group) > 4
GROUP by id_doc_group
แสดงข้อมูลประเภทโดยไม่ซ้ำ
SELECT id_doc_group, GROUP_CONCAT(DISTINCT id_type_pay), COUNT( DISTINCT id_type_pay)
FROM `my_table`
WHERE LENGTH(id_doc_group) > 4
GROUP by id_doc_group
เลือกแสดงเฉพาะรายการ ที่มีข้อมูลประเภทซ้ำกันมากกว่า 1 รหัส
SELECT id_doc_group, GROUP_CONCAT(DISTINCT id_type_pay), COUNT( DISTINCT id_type_pay)
FROM `my_table`
WHERE LENGTH(id_doc_group) > 4
GROUP by id_doc_group
HAVING COUNT( DISTINCT id_type_pay) > 1
ผลลัพธ์
หลังจากลองเพิ่มคำสั่ง SQL ทีละตัวเข้าไป ในที่สุดผมก็ได้รายการที่มีประเภทมากกว่า 1 ประเภทในกลุ่มเอกสารเดียวกัน ซึ่งหากต้องการรายการเฉพาะ ก็สามารถเพิ่มเงื่อนไข WHERE เข้าไปได้เรื่อยๆ
ความคิดเห็น
แสดงความคิดเห็น