trungminh > 18-09-16, 11:29 AM
maidinhdan > 18-09-16, 01:44 PM
(18-09-16, 11:29 AM)trungminh Đã viết: Mình có file đính kèm làm report mà chưa làm được theo mẫu vì 2 trường GiOI và TUOI bằng chữ (vì bắt buộc) mọi người giúp làm mẫu cho với, hoặc thiết kế báo cáo như nào nhanh gọn nhẹ
thank nhiêu
Link file: http://www.mediafire.com/download/r0hbce...0t/thu.rar
ongke0711 > 18-09-16, 09:35 PM
SELECT A.TUVONG, A.Tuoi, Switch([Tuoi]>=0 And [Tuoi]<1,"<1",[Tuoi]>=1 And [Tuoi]<5,"1-<5",[Tuoi]>=5 And [Tuoi]<15,"5-<15",[Tuoi]>=15 And [Tuoi]<60,"15-<60",[Tuoi]>=60,"60+",True,Null) AS KhoangTuoi, IIf(DatePart("m",[A]![NGAYSINH])=DatePart("m",Date()) And DatePart("d",[A]![NGAYSINH])=DatePart("d",Date()),CInt((DateDiff('d',[A]![NGAYSINH],Date())/365.25)),CInt((DateDiff('d',[A]![NGAYSINH],Date())/365.25)-0.5)) AS Tuoi, A.GIOI
FROM TUVONG AS A;
Nguyen Hoang Diep > 19-09-16, 08:59 AM
ongke0711 > 19-09-16, 11:13 AM
(19-09-16, 08:59 AM)Nguyen Hoang Diep Đã viết: Bạn thử file này xem sao nhé.
Tải file về và bạn chạy query thử nhé.
http://www.mediafire.com/download/87b6qx...BAOCAO.mdb
trungminh > 25-09-16, 09:45 PM
(18-09-16, 09:35 PM)ongke0711 Đã viết: Theo yêu cầu về cái báo cáo của bạn thì tôi phải làm qua 3 cái query mới ra kết quả. Bạn nào có cách khác tối ưu hơn thì đóng góp nhé.
- Query1 (qryKhoangTuoi): gán các khoảng tuổi (<1, 1-5, 5-15...) cho từng người trong table. Tôi đổi trường [TUOI] của bạn thành dạng Number để tính toán.
- Query2 (qrySoNguoi_KhoangTuoi): đếm số người trong từng khoảng tuổi.
- Query3 (qryThongKe): là crosstab query tổng hợp từ Query 2 để ra kết quả như mong muốn trong report.
Link file: http://www.mediafire.com/download/xpxyzi...zv/THU.mdb
Góp ý:
- Trường [TUOI] trong table của bạn phải là dạng Number thì mới áp dụng query của tôi được. File hiện tại của bạn trường [TUOI] dạng TEXT thì không có xử lý tính toán gì được nhé (lại có thêm dòng "2 tháng"). Query 1 của tôi có thể không cần sử dụng trường [TUOI] của bạn, chỉ cần có trường [Ngày Sinh] của từng người là làm được. Câu lệnh SQL như bên dưới.
Mã PHP:SELECT A.TUVONG, A.Tuoi, Switch([Tuoi]>=0 And [Tuoi]<1,"<1",[Tuoi]>=1 And [Tuoi]<5,"1-<5",[Tuoi]>=5 And [Tuoi]<15,"5-<15",[Tuoi]>=15 And [Tuoi]<60,"15-<60",[Tuoi]>=60,"60+",True,Null) AS KhoangTuoi, IIf(DatePart("m",[A]![NGAYSINH])=DatePart("m",Date()) And DatePart("d",[A]![NGAYSINH])=DatePart("d",Date()),CInt((DateDiff('d',[A]![NGAYSINH],Date())/365.25)),CInt((DateDiff('d',[A]![NGAYSINH],Date())/365.25)-0.5)) AS Tuoi, A.GIOI
FROM TUVONG AS A;
- Như bạn nói các trường [TUOI], [GIOI] bắt buộc là text, không sửa được thì đây là do bạn thiết kế table chưa chuẩn. Vd rõ nhất là trường [TUOI] dạng text của bạn xem như vô dụng vì không sử dụng được gì để truy vấn, tính toán. Nếu chỉ để hiển thị trên form hay báo cáo thì chỉ cần dùng hàm Tính tuổi hoặc công thức dựa trên [Ngày sinh] là có rồi, không cần phải lưu thành 1 cột trên table cho lãng phí. (hàm tính tuổi trên diễn đàn có nhiều).