ongke0711 > 22-02-20, 05:55 PM
(22-02-20, 02:05 PM)Xuân Thanh Đã viết: Đây là câu lệnh SQL của Crostab Query Mở một query mới rồi dán câu lệnh đó vào. Lưu lại và khi cần thì show cái query này ra
Lưu ý trong lệnh Where có ghi giá trị =2 và 2020. Đây là tháng và năm cần lấy dữ liệu
TRANSFORM Min(tbChuyenCan.MaChuyenCan) AS MinOfMaChuyenCan
SELECT tbChuyenCan.MaHS
FROM tbChuyenCan
WHERE (((Month([Ngay]))=2) AND ((Year([Ngay]))=2020))
GROUP BY tbChuyenCan.MaHS
PIVOT tbChuyenCan.Ngay;
TRANSFORM Min(tbChuyenCan.MaChuyenCan) AS MinOfMaChuyenCan
SELECT tbChuyenCan.MaHS, Month([Ngay]) AS Thang
FROM tbChuyenCan
GROUP BY tbChuyenCan.MaHS, Month([Ngay])
PIVOT Format([tbChuyenCan].[Ngay],"dd") In (01,02,03,04,05,06,07,08,09,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31);
AnNguyen > 22-02-20, 06:10 PM
(22-02-20, 03:47 PM)Xuân Thanh Đã viết: Vì chỉ lấy mỗi table Chuyên Cần nên chắc là ban ấy chỉ post mỗi table ấy thôi chứ CSDL như thế thì không ổn. Ít nhất để chỉ làm cái CHUYÊN CẦN không thôi thì tối thiểu nhất cũng là hai Table. Một table tblHocSinh ghi nhận thông tin về học sinh và một table tblChuyenCan như của bạn. Hai table này liên kết ràng buộc qua MaHS. Nếu đầy đủ hơn thì thêm table tblLoaiCC nữaThật ra em mới đang xây dựng CSDL nên em cũng chưa có gì ạ.
Và hình như bạn này còn đang lúng túng trong việc phân bố CSDL và cách thiết kế form sao cho hợp lý. Thiết kế form quả là một vấn đề nan giải và hóc búa.
Với CSDL này chỉ cần thiết kế Main-Sub cho chuẩn là OK(Có khi một Main nhưng lại cõng thêm hai, ba Sub nữa không chừng
AnNguyen > 22-02-20, 06:16 PM
(22-02-20, 03:36 PM)tranthanhan1962 Đã viết:Em cảm ơn ạ.(22-02-20, 10:38 AM)AnNguyen Đã viết: Đây file của em đây ạCSDL của bạn quá đơn giản, nói chung là không đủ tiên chuẩn để xử lý được công việc. Đây là Demo của mình được tách từ một CSDL quản lý nhân sự tiền lương. Nói chung CSDL của mình rất phức tạp nên khi tách ra cũng không đơn giải chút nào, mình làm cả buổi sáng mới xong . Cũng còn một vài chi tiết nhưng mình thấy không quan trọng và không quá khó khăn khi bạn nghiên cứu demo và cũng lười nên còn sót. Ví dụ table BangChamCong chính là bảng đánh giá chuyên cần học sinh, Field TenNV chính là tên học sinh, STT có thể đổi thành mã HS ...
ChuyenCan
Khi đánh giá HS từng ngay thì bạn mở form F_Bangchamcong, chọn ngày, tháng, năm rồi đánh giá. Mặc định nó sẽ mở ra đúng ngày hệ thống, khi có tháng mới nó sẽ tự tạo danh sách học sinh để đánh giá trong tháng mới. Muốn xem tổng hợp các kiểu đanh giá thì mở form F_tongHop chọn tháng, sẽ có tổng hợp các đánh giá cho từng học sinh
Demo
Chúc bạn thành công.
tranthanhan1962 > 22-02-20, 06:42 PM
(22-02-20, 06:16 PM)AnNguyen Đã viết: Em cảm ơn ạ.Hiện hẳn 30 ngày thì phải viết lại code, mà hiện đủ 30 ngày một đống cột nó thè lè rất xấu, màn hình có khi không đủ, chấm thì cứ chọn ngày còn muốn xem thì lấy query Q_TongHop01 tạo bộ lọc tháng và năm rồi tạo form thì mặc sức mà coi. Thực ra chấm trên form có nhiều cột như vậy rất dễ bị lộn.
Bài này của bác cũng tạo số cột tương ứng số ngày trong tháng như lúc đầu em hướng đến đấy ạ. Của bác khi chấm công là chọn từng ngày ạ, em muốn là hiện hẳn ra 31 ngày cơ ạ để người chấm họ có thể nhìn thấy những ngày trước luôn ạ.
AnNguyen > 22-02-20, 06:50 PM
(22-02-20, 06:42 PM)tranthanhan1962 Đã viết:Vâng nếu k ổn thì em lại chuyển về chấm từng ngày 1 ạ, Vì chỗ e nó hơi phức tạp các bạn nhiều lúc chấm đôi khi còn nhìn lại hôm trước đã chấm gì cơ ạ.(22-02-20, 06:16 PM)AnNguyen Đã viết: Em cảm ơn ạ.Hiện hẳn 30 ngày thì phải viết lại code, mà hiện đủ 30 ngày một đống cột nó thè lè rất xấu, màn hình có khi không đủ, chấm thì cứ chọn ngày còn muốn xem thì lấy query Q_TongHop01 tạo bộ lọc tháng và năm rồi tạo form thì mặc sức mà coi. Thực ra chấm trên form có nhiều cột như vậy rất dễ bị lộn.
Bài này của bác cũng tạo số cột tương ứng số ngày trong tháng như lúc đầu em hướng đến đấy ạ. Của bác khi chấm công là chọn từng ngày ạ, em muốn là hiện hẳn ra 31 ngày cơ ạ để người chấm họ có thể nhìn thấy những ngày trước luôn ạ.
AnNguyen > 22-02-20, 06:53 PM
(22-02-20, 05:55 PM)ongke0711 Đã viết:Anh ơi, code này chạy trên Access ok ạ. Vậy chạy trên SQL cần sửa lại gì không ạ vì em thử không được ạ.(22-02-20, 02:05 PM)Xuân Thanh Đã viết: Đây là câu lệnh SQL của Crostab Query Mở một query mới rồi dán câu lệnh đó vào. Lưu lại và khi cần thì show cái query này ra
Lưu ý trong lệnh Where có ghi giá trị =2 và 2020. Đây là tháng và năm cần lấy dữ liệu
TRANSFORM Min(tbChuyenCan.MaChuyenCan) AS MinOfMaChuyenCan
SELECT tbChuyenCan.MaHS
FROM tbChuyenCan
WHERE (((Month([Ngay]))=2) AND ((Year([Ngay]))=2020))
GROUP BY tbChuyenCan.MaHS
PIVOT tbChuyenCan.Ngay;
Bổ sung thêm câu lệnh Crosstab Query để luôn luôn có tổng số các cột có 31 ngày. Cách này giúp bạn có thể thiết kế Report với cố định 31 cột cho ngày, tuỳ tháng mà dữ liệu sẽ được điền vào cột tương ứng.
Mã PHP:TRANSFORM Min(tbChuyenCan.MaChuyenCan) AS MinOfMaChuyenCan
SELECT tbChuyenCan.MaHS, Month([Ngay]) AS Thang
FROM tbChuyenCan
GROUP BY tbChuyenCan.MaHS, Month([Ngay])
PIVOT Format([tbChuyenCan].[Ngay],"dd") In (01,02,03,04,05,06,07,08,09,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31);
Xuân Thanh > 22-02-20, 07:28 PM
(22-02-20, 06:53 PM)AnNguyen Đã viết: Anh ơi, code này chạy trên Access ok ạ. Vậy chạy trên SQL cần sửa lại gì không ạ vì em thử không được ạ.
Em cảm ơn anh!
AnNguyen > 22-02-20, 07:36 PM
ongke0711 > 22-02-20, 08:39 PM
(22-02-20, 06:50 PM)AnNguyen Đã viết: Bài này của bác cũng tạo số cột tương ứng số ngày trong tháng như lúc đầu em hướng đến đấy ạ. Của bác khi chấm công là chọn từng ngày ạ, em muốn là hiện hẳn ra 31 ngày cơ ạ để người chấm họ có thể nhìn thấy những ngày trước luôn ạ.
...
Hiện hẳn 30 ngày thì phải viết lại code, mà hiện đủ 30 ngày một đống cột nó thè lè rất xấu, màn hình có khi không đủ, chấm thì cứ chọn ngày còn muốn xem thì lấy query Q_TongHop01 tạo bộ lọc tháng và năm rồi tạo form thì mặc sức mà coi. Thực ra chấm trên form có nhiều cột như vậy rất dễ bị lộn.
...
Vâng nếu k ổn thì em lại chuyển về chấm từng ngày 1 ạ, Vì chỗ e nó hơi phức tạp các bạn nhiều lúc chấm đôi khi còn nhìn lại hôm trước đã chấm gì cơ ạ.
AnNguyen > 23-02-20, 09:28 AM