Nhóm mẫu tin và gán giá trị theo nhóm có điều kiện ?

Liên hệ QC
1. trường hợp bạn VetMini trình bày #11 cách này cũng hay, do lúc đầu mình mới xem thoáng qua thấy sử dụng 2 table mình chưa xem kỹ.
2. theo lý thuyết mình đọc là khuyên dùng BETWEEN nhưng thực tế chương trình của cty chạy thỉnh thoảng xảy ra lỗi nên mình mới chuyển sang cách dài hơn ít bị lỗi, theo mình ít gây lỗi là mình sử dụng. Không biết các bạn đọc bài viết của mình có bạn nào đã từng sử dụng SQL Server 2005 để vấn tin ? hàm BETWEEN không lấy được mẫu tin có giờ vượt qua 12h trưa cùng ngày, nên mình cũng quen cách dài này.
3. theo đoạn code phía dưới này, mình có thể chỉnh sửa code lại để ẩn các cột, trừ cột số lượng để tính tổng số lượng xuất ra một dòng thay vì xuất ra nhiều dòng ? chắc là không được vì trường hợp này có biểu thức [BOOL].
Mã:
SELECT HDBAN.HD, IIf(HD In (SELECT HD FROM HDBAN where LOAIHD='FBAN' AND ((HDBAN.NGAYGIAO)>=#1/1/2019# And (HDBAN.NGAYGIAO)<=#1/31/2019#)),1) AS BOOL, HDBAN.LOAIHD, HDBAN.SOLUONG, HDBAN.DONGIA, HDBAN.NGAYGIAO, HDBAN.CHINHANH
FROM HDBAN
WHERE (((HDBAN.NGAYGIAO)>=#1/1/2019# And (HDBAN.NGAYGIAO)<=#1/31/2019#));
 
1. trường hợp bạn VetMini trình bày #11 cách này cũng hay, do lúc đầu mình mới xem thoáng qua thấy sử dụng 2 table mình chưa xem kỹ.
2. theo lý thuyết mình đọc là khuyên dùng BETWEEN nhưng thực tế chương trình của cty chạy thỉnh thoảng xảy ra lỗi nên mình mới chuyển sang cách dài hơn ít bị lỗi, theo mình ít gây lỗi là mình sử dụng. Không biết các bạn đọc bài viết của mình có bạn nào đã từng sử dụng SQL Server 2005 để vấn tin ? hàm BETWEEN không lấy được mẫu tin có giờ vượt qua 12h trưa cùng ngày, nên mình cũng quen cách dài này.
3. theo đoạn code phía dưới này, mình có thể chỉnh sửa code lại để ẩn các cột, trừ cột số lượng để tính tổng số lượng xuất ra một dòng thay vì xuất ra nhiều dòng ? chắc là không được vì trường hợp này có biểu thức [BOOL].
Mã:
SELECT HDBAN.HD, IIf(HD In (SELECT HD FROM HDBAN where LOAIHD='FBAN' AND ((HDBAN.NGAYGIAO)>=#1/1/2019# And (HDBAN.NGAYGIAO)<=#1/31/2019#)),1) AS BOOL, HDBAN.LOAIHD, HDBAN.SOLUONG, HDBAN.DONGIA, HDBAN.NGAYGIAO, HDBAN.CHINHANH
FROM HDBAN
WHERE (((HDBAN.NGAYGIAO)>=#1/1/2019# And (HDBAN.NGAYGIAO)<=#1/31/2019#));
Thử
Mã:
Select Sum(SOLUONG) As TONG
From HDBAN
Where HD In (Select  HD From HDBAN Where LOAIHD='FBAN' And (NGAYGIAO>=#2019/1/1# And NGAYGIAO<=#2019/1/31#)) ;
 
Câu 2., bài #21: bó tay.
 
1. Tính tổng số lượng theo điều kiện bài #22 sẽ cho ra kết quả không đúng, còn nếu bỏ dấu tích không cho hiện cột [BOOL] thì khi chạy sẽ báo: "Enter Parmater Value [BOOL]: " chưa thể tính SUM được.
Mã:
Select Sum(SOLUONG) As TONG
From HDBAN
Where HD In (Select  HD From HDBAN Where LOAIHD='FBAN' And (NGAYGIAO>=#2019/1/1# And NGAYGIAO<=#2019/1/31#)) ;

2. Ở chế độ thiết kế SQL của access nếu vấn tin đó nhiều và phức tạp sẽ hơi khó nhìn, các bạn có biết phần mềm nào nó hổ trợ định dạng câu lệnh vấn tin SQL của access cho dể nhìn hơn ?

3. bạn ongke0711 ở bài viết #18 hình như đã lập trình phần mềm cho máy chấm công thì phải ? nhân tiện đây mình hỏi máy chấm công hiệu Ronald jack x628-C mình xuất dữ liệu vân tay từ máy ra gồm có 2 file: data.dat và device.dat khi xuất máy báo OK xuất file không bị lỗi file, hai file này mình import vào máy mới cùng hiệu nhưng bị báo lỗi: "IP lỗi Error Input!" Restore the data to the device, and the data must be the backup BIN data passing the backup function before, bạn biết lỗi này khắc phục như thế nào ? ngoài ra bạn có đĩa SDK của dòng máy này ? đây là câu hỏi ngoài bài viết mà trên trang này không thấy mục này, các bạn thông cảm nhé.
 
1. Tính tổng số lượng theo điều kiện bài #22 sẽ cho ra kết quả không đúng, còn nếu bỏ dấu tích không cho hiện cột [BOOL] thì khi chạy sẽ báo: "Enter Parmater Value [BOOL]: " chưa thể tính SUM được.
Thấy dùng sub query ào ào, hàm Sum không tính được, bó tay chấm xôi
 
Thấy dùng sub query ào ào, hàm Sum không tính được, bó tay chấm xôi
Query ở bài #22 sẽ cho ra một con số duy nhất, đó là tổng của tất cả những dòng HDBAN mà trong đó có ít nhất một dòng HDBAN thoả điều kiện LOAIHD và NGAYGIAO.
Ví dụ tôi có HD "abcd", HD này có tất cả 5 dòng (records). Trong số 5 dòng này chỉ cần 1 dòng có LOAIHD là "FBAN" và NGAYGIAO trong tháng 01/2019 thì tôi sẽ được tổng của cả 5 dòng đó (cộng tất cả những HD tương tự)

Ở trên, thớt lẩm bẩm cái chỗ BOOL là do không biết mình muốn gì. Thực ra thì ngừoi ta phải dùng 2 truy vấn riêng biệt. Một truy vấn tổng những HD thoả (1) và một cho những HD không thoả (0). Nếu muốn gộp vào 1 chỗ thì có thể dùng group.
 
1. Tính tổng số lượng theo điều kiện bài #22 sẽ cho ra kết quả không đúng, còn nếu bỏ dấu tích không cho hiện cột [BOOL] thì khi chạy sẽ báo: "Enter Parmater Value [BOOL]: " chưa thể tính SUM được.

2. Ở chế độ thiết kế SQL của access nếu vấn tin đó nhiều và phức tạp sẽ hơi khó nhìn, các bạn có biết phần mềm nào nó hổ trợ định dạng câu lệnh vấn tin SQL của access cho dể nhìn hơn ?

3. bạn ongke0711 ở bài viết #18 hình như đã lập trình phần mềm cho máy chấm công thì phải ? nhân tiện đây mình hỏi máy chấm công hiệu Ronald jack x628-C mình xuất dữ liệu vân tay từ máy ra gồm có 2 file: data.dat và device.dat khi xuất máy báo OK xuất file không bị lỗi file, hai file này mình import vào máy mới cùng hiệu nhưng bị báo lỗi: "IP lỗi Error Input!" Restore the data to the device, and the data must be the backup BIN data passing the backup function before, bạn biết lỗi này khắc phục như thế nào ? ngoài ra bạn có đĩa SDK của dòng máy này ? đây là câu hỏi ngoài bài viết mà trên trang này không thấy mục này, các bạn thông cảm nhé.

1. Tôi nghĩ bạn nên nói rõ lại bài toán cuối cùng bạn muốn là gì với cái dữ liệu Excel đang có. Có thể có những giải thuật khác nhau để đạt kết quả thay vì phải thông qua cách bạn đang làm là tạo trường BOOL rồi xử lý SUM gì đó.

2. Đối vói query đơn giản thì dùng lưới Query còn nhưng query phức tạp có lồng subquery thì bạn chỉ còn cách xem và xử lý trên khung SQL View thôi.

3. Tôi không có lập trình máy chấm công mà chỉ lấy dữ liệu từ máy đưa vô ứng dụng Access để xử lý tính toán thôi bạn à. :)
 
1. Tôi nghĩ bạn nên nói rõ lại bài toán cuối cùng bạn muốn là gì với cái dữ liệu Excel đang có. Có thể có những giải thuật khác nhau để đạt kết quả thay vì phải thông qua cách bạn đang làm là tạo trường BOOL rồi xử lý SUM gì đó.

2. Đối vói query đơn giản thì dùng lưới Query còn nhưng query phức tạp có lồng subquery thì bạn chỉ còn cách xem và xử lý trên khung SQL View thôi.

1. Tôi nghĩ là thớt làm cho người khác. Chính mình cũng chưa rõ ngừoi kia muốn gì.

2. Người ta nói chuyện SQL Server như là kinh nghiệm lắm. Nhưng căn bản CSDL LH chưa nắm được. Chuyện xem code ngắn hay dài chỉ là màu mè.
Query như bàn tay thò vào túi lấy đồ. Chủ yếu tay cần nhạy bén để rờ rẩm, lấy đúng món đồ thôi chứ bàn tay nhỏ to đâu có quan trọng.
(mà hình như ở đây, món đồ hình dạng ra sao còn chưa rõ)
 
1. Các bạn đừng nóng, mình đang đi Ctác bên ngoài, không có ngồi với máy tính, thứ 2 mới về sẽ xem lại chỗ lỗi đó, nếu không được mình sẽ nhờ các bạn trợ giúp, cho mình gửi lời cảm ơn các bạn đã quan tâm đọc bài viết của mình, có các bạn quan tâm đọc bài thế này mình nghĩ bài toán khó mấy cũng sẽ giải quyết được, một lần nữa cám ơn các bạn đọc bài viết của mình.
2. bạn ongke0711 nói "đối với query đơn giản thì dùng lưới... " theo mình bạn nói chỉ đúng một phần nào thôi có những cái vấn tin phải dùng cả hai trường hợp vừa ở chế độ code SQL để sửa và vừa ở chế độ dùng lưới Query để sửa, đặt biệt ở chế độ code SQL mà nó dài khoảng 1/2 trang giấy A4 mà lỡ tay xóa đi dấu phẩy hoặc dấu ngoặc, hay câu lệnh thiếu gì đó... là sẽ báo lỗi, lúc này có trường hợp nó cho chuyển về chế độ dùng lưới Query để chỉnh sửa nhưng có cũng trường hợp nó không cho chuyển về dùng lưới Query buộc phải sửa ở chế độ code SQL, với chiều dài code SQL 1/2 trang giấy A4 hoặc hơn, ngồi mò tìm lỗi bạn sẽ thấy hơi khó chịu một tí.
 
"lỡ tay xoá đi dấu phẩy hoặc dấu ngoặc, hay câu lệnh thiếu gì đó... là sẽ báo lỗi" + "ngồi mò tìm lỗi" : a ma tơ
Chuyện đó KHÔNG XẢY RA đối với dân kinh nghiệm code.
Dân truy vấn SQL chỉ biết sợ lấy dữ liệu không đúng thôi (*). Báo lỗi là chuyện trẻ em.
 
"lỡ tay xoá đi dấu phẩy hoặc dấu ngoặc, hay câu lệnh thiếu gì đó... là sẽ báo lỗi" + "ngồi mò tìm lỗi" : a ma tơ
Chuyện đó KHÔNG XẢY RA đối với dân kinh nghiệm code.
Dân truy vấn SQL chỉ biết sợ lấy dữ liệu không đúng thôi (*). Báo lỗi là chuyện trẻ em.
Trong cái dấu * là gì đó anh, hình như anh quên ghi chú về dấu * này, em đọc chưa hiểu lắm ạ
 
Trong cái dấu * là gì đó anh, hình như anh quên ghi chú về dấu * này, em đọc chưa hiểu lắm ạ

Vợ kêu đi dọn * cháu nên bỏ dở.

Cái dấu * có nghĩa là hàng khủng.
GPE có lệ hù người ta bằng hàng khủng. Worksheet không hàng triệu dòng thì cũng hàng ngàn cột. Workbook thì vài trăm sheets. Project VBA đếm trên đơn vị hàng ngàn dòng, hàng trăm mô đun, forms.
Riêng góc CSDL này chắc ngoại lệ, 1/2 trang A4 tính đem ra hù rồi.
 
1. Các bạn nói chuyện cũng vui quá hen, tất nhiên là lỗi sẽ tìm ra rồi, lỗi này là lỗi cú pháp nhưng cách trình bày sao cho dể nhìn thôi, trình bày dể nhìn thì dể tìm ra lỗi cú pháp nhanh hơn.
2. Hôm nay mình gửi file access lên nhờ các bạn chia sẻ kinh nghiệm vấn tin giúp mình, vấn tin này cho kết quả đúng nhưng mình chưa gộp thành 1 dòng được, theo mình chưa gộp được là do trường [HD], trường này năm trong biểu thức DOANHTHU2, nếu xử lý được chổ này sẽ gộp thành 1 dòng, xem file đính kèm http://www.mediafire.com/file/25aq5xcwozss4l7/baitap.mdb/file
 
1. Mình cũng mò ra được lấy 1 dòng với điều kiện bỏ đi trường CHINHANH (bỏ điều kiện group), mình muốn lấy thêm dòng CHINHANH này bị báo lỗi trường HD như trên, mình gửi lại: http://www.mediafire.com/file/8i58rmn8fgufq9a/baitap.mdb/file
2. vấn tin trên sử dụng toán tử IN để lọc hợp đồng để tính doanh thu 2 và kết quả cuối cùng là TONGSL, TONGDOANHTHU2, vấn tin trên có thể viết lại sử dụng toán tử Exists ? mình thấy toán tử này giống với vấn tin của mình.
 
1. Mình cũng mò ra được lấy 1 dòng với điều kiện bỏ đi trường CHINHANH (bỏ điều kiện group), mình muốn lấy thêm dòng CHINHANH này bị báo lỗi trường HD như trên, mình gửi lại: http://www.mediafire.com/file/8i58rmn8fgufq9a/baitap.mdb/file
2. vấn tin trên sử dụng toán tử IN để lọc hợp đồng để tính doanh thu 2 và kết quả cuối cùng là TONGSL, TONGDOANHTHU2, vấn tin trên có thể viết lại sử dụng toán tử Exists ? mình thấy toán tử này giống với vấn tin của mình.

Thử xem nhé: sửa từ query của bạn

Mã:
SELECT A.CHINHANH, A.HD, Sum([SOLUONG]/1000) AS TONGSL, Sum(IIf(Not IsNull([DONGIATT]),[SOLUONG]*([DONGIATT]/1000000),[SOLUONG]*([DONGIA]/1000000))) AS DOANHTHU, Sum(IIf(IsNull([TTLUI]),[SOLUONG]*([DONGIA]/1000000),[SOLUONG]*([DONGIATT]/1000000))) AS DOANHTHU2, Sum(IIf(IsNull([DONGIA]),[SOLUONG]*([DONGIATT]/1000000),[SOLUONG]*([DONGIA]/1000000))) AS DOANHTHUTT, Sum(IIf(IsNull([DONGIA]) And Not IsNull([UNGTIEN]),([UNGTIEN]/1000000),[SOLUONG]*([DONGIA]/1000000))) AS DOANHTHUTU, Sum(IIf([LOAIHD]='BSSXT',[LAIGOPDTCP]/1000000)) AS BSSXT, Sum(IIf([LOAIHD]='BSFGT',[LAIGOPDTCP]/1000000)) AS BSFGT, Sum(IIf(Not IsNull([DONGIA]) And Not IsNull([DONGIATT]),([SOLUONG]*([DONGIA]-[DONGIATT]))/1000000)) AS DAFG, IIf(Not IsNull([BSFGT]) And Not IsNull([BSSXT]),[BSFGT]+[BSSXT],IIf(IsNull([BSFGT]) And Not IsNull([BSSXT]),[BSSXT],[BSFGT])) AS BSLN, IIf(Not IsNull([DOANHTHU2]) And Not IsNull([BSLN]),[DOANHTHU2]+[BSLN],IIf(IsNull([DOANHTHU2]) And Not IsNull([BSLN]),[BSLN],[DOANHTHU2])) AS TONGDOANHTHU2, IIf(Not IsNull([DOANHTHU]) And Not IsNull([BSLN]),[DOANHTHU]+[BSLN],IIf(IsNull([DOANHTHU]) And Not IsNull([BSLN]),[BSLN],[DOANHTHU])) AS TONGDOANHTHU, IIf(Not IsNull([DOANHTHUTT]) And Not IsNull([BSLN]),[DOANHTHUTT]+[BSLN],IIf(IsNull([DOANHTHUTT]) And Not IsNull([BSLN]),[BSLN],[DOANHTHUTT])) AS TONGDOANHTHUTT, IIf(Not IsNull([DOANHTHUTU]) And Not IsNull([BSLN]),[DOANHTHUTU]+[BSLN],IIf(IsNull([DOANHTHUTU]) And Not IsNull([BSLN]),[BSLN],[DOANHTHUTU])) AS TONGDOANHTHUTU
FROM HDBAN AS A
WHERE (((A.CHINHANH)="LD") AND ((A.LOAIHD) In ("GIAO","GIAO2","BSFGT","BSSXT")) AND ((A.HD) In (SELECT HD FROM HDBAN WHERE (((HDBAN.LOAIHD)='FBAN1' Or (HDBAN.LOAIHD)='FBAN2') AND ((HDBAN.NGAYGIAO)>=#1/3/2019# And (HDBAN.NGAYGIAO)<=#3/31/2019#)))))
GROUP BY A.CHINHANH, A.HD;
 
Web KT
Back
Top Bottom