query
SET @startdate = '2025-01-01';SET @enddate = CURDATE(); WITH src AS ( SELECT DATE_FORMAT(o.vstdate, '%Y-%m') AS ym, CASE WHEN o.icode = '3016495' THEN 'ไม้เท้า 1ปุ่ม' WHEN o.icode = '3016496' THEN 'ไม้เท้า 3 ขา' WHEN o.icode = '3017313' THEN 'Walker' WHEN o.icode = '3016497' THEN 'เครื่องช่วยเดินชนิด 4 ขา (Pick-up-walker) (8701)' WHEN o.icode = '3016858' THEN 'เครื่องช่วยเดินชนิด 4 ขา มีล้อ (Posterior Wheel Walker) (8702)' WHEN o.icode = '3016862' THEN 'ที่ช่วยฝึกเดินแบบมีล้อขนาดกลาง(Anterior Wheel Walker) (8709)' WHEN o.icode = '3016863' THEN 'ที่ช่วยฝึกเดินแบบมีล้อขนาดเล็ก (Anterior Wheel Walker) (8710)' WHEN o.icode = '3016499' THEN 'รถเข็นนั่ง' WHEN o.icode = '3017375' THEN 'รถโยก' WHEN o.icode = '3017320' THEN 'ไม้ค้ำยันรักแร้' WHEN o.icode = '3016498' THEN 'ไม้ค้ำยันรักแร้แบบไม้ (พิการ) (8711)' WHEN o.icode = '3016826' THEN 'อุปกรณ์พยุงหลัง' WHEN o.icode IN ('3016493','3016492') THEN 'อุปกรณ์พยุงเข่า' WHEN o.icode = '3016491' THEN 'สายคล้องแขนกันไหล่หลุด' ELSE 'อื่นๆ' END AS item_type, o.qty, COALESCE(o.pttype, ov.pttype) AS pttype FROM opitemrece o LEFT JOIN ovst ov ON ov.vn = o.vn WHERE o.vstdate BETWEEN @startdate AND @enddate AND o.icode IN ('3016495','3016496','3017313','3016497','3016858','3016862','3016863', '3016499','3017375','3017320','3016498','3016826','3016493','3016492','3016491')),agg AS ( SELECT item_type, ym, SUM(CASE WHEN pttype = '56' THEN qty ELSE 0 END) AS s_lgo, SUM(CASE WHEN pttype IN ('02','03','12','60','O1') THEN qty ELSE 0 END) AS s_ofc, SUM(CASE WHEN pttype IN ('13','17','18','19','23','44','45','46','S4') THEN qty ELSE 0 END) AS s_sss, SUM(CASE WHEN pttype IN ('11','21','58','71','72','73','75','76','77','80','81','82','87','88','90','91','94','95','A5','A9','AA') THEN qty ELSE 0 END) AS s_ucs, SUM(CASE WHEN pttype IN ('06') THEN qty ELSE 0 END) AS s_oth, SUM(CASE WHEN pttype IN ('74','D1') THEN qty ELSE 0 END) AS d_ucs, SUM(CASE WHEN pttype IN ('99') THEN qty ELSE 0 END) AS s_pay, SUM(CASE WHEN pttype NOT IN ('56','02','03','12','60','O1','13','17','18','19','23','44','45','46','S4', '11','21','58','71','72','73','74','75','76','77','80','81','82','87','88', '90','91','94','95','A5','A9','AA','D1','06','99') THEN qty ELSE 0 END) AS s_other FROM src GROUP BY item_type, ym)SELECT item_type, ym, s_lgo, s_ofc, s_sss, s_ucs, s_oth, d_ucs, s_pay, s_other, (s_lgo+s_ofc+s_sss+s_ucs+s_oth+d_ucs+s_pay+s_other) AS total_qtyFROM aggORDER BY item_type, ym