- คิวรี่นี้ซับซ้อนเสียหน่อย ถ้าเขียนจริงๆคงจะเป็น SELECT ซ้อนกัน 3 ชั้น แต่เพื่อให้ดูง่าย(หรือเปล่าไม่รู้)และคงการใช้ DCount() เอาไว้ ก็จะออกมาเหลือ 2 ชั้น
- ในนี้ผมสมมุติให้ชื่อเทเบิลว่า TB และชื่อฟิลด์ว่า dt,status,type คุณไปเปลี่ยนเองแล้วกัน
- ผมเขียนเพื่อให้ดูสะอาดตาขึ้นโดยขึ้นบรรทัดใหม่ แต่สามารถนำเอามาต่อกันโดยมีช่องว่างคั่นสักตัวนึงก็ได้นะครับ เช่น บรรทัดที่ 1 และ 2 สามารถเขียนเป็น SELECT [Month-Year], Inprogress, Complete, [Inprogress]+[Complete] AS Total, ก็ได้
SELECT
[Month-Year], Inprogress, Complete,
[Inprogress]+[Complete] AS Total,
Format([Complete]/([Inprogress]+[Complete])*100,"0.00") AS [% Complete]
FROM
(SELECT Format([dt],"mmm-yyyy") AS [Month-Year],
First(Month([dt])) AS M,
First(Year([dt])) AS Y,
First(Val(DCount("*","TB","Status = '2' and Type = '1' and (month(dt) = " & Month([dt]) & ") and (year(dt) = " & Year([dt]) & ") "))) AS Inprogress,
First(Val(DCount("*","TB","Status = '1' and Type = '1' and (month(dt) = " & Month([dt]) & ") and (year(dt) = " & Year([dt]) & ") "))) AS Complete
FROM TB
GROUP BY Format([dt],"mmm-yyyy")) AS Q1
ORDER BY Y, M;