Đánh giá chủ đề:
  • 2 Votes - 2 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Hỏi về xóa trường liên quan đến 2 bảng?
#11
Bạn post dữ liệu mẫu lên đi.
Nếu 2 môn cùng nằm 1 dòng thì trong trường hợp có nhiều hơn 1 dòng toán/văn thì sẽ thế nào? Sum hay tính trung bình?

Có hai hướng có thể đáp ứng nhu cầu của bạn:
1/ Crosstab query => dùng Thuật sĩ

2/group by theo Mã học sinh kết hợp hàm iif.
Đại loại như cột Toán, Văn sẽ phát biểu thế này:
B1/ Tạo query với 2 cột mới
Toan: iif([mon] = "Toan",[diem],0)
Van: iif([mon] = "Van",[diem],0)

B2/ Tạo query thứ 2 với nguồn là query kia, và Groupby theo Mã Học sinh. Sum hoặc tính trung bình các cột điểm.
...
Tự mò mới giỏi! big green
Chữ ký của Noname 020
ღღღღღTài sản của Noname (View All Items) ღღღღღ
Reply
Những người đã cảm ơn
#12
Đây là dữ liệu của bài đó
http://www.mediafire.com/?9yc0yv1gj3rxx2s
Bạn xem qua giúp mính nhá cái query1 đó sad
Nó vẫn hiện lên 2 dòng mà cùng một học sinh 52_52
Chữ ký của casio262 http://lequang.vn
Reply
Những người đã cảm ơn
#13
Sửa query của bạn thành thế này:
Mã:
SELECT DANHSACH.MAHS, DANHSACH.HO, DANHSACH.TEN, Avg(IIf([mon]='Toan',[DIEM],0)) AS Toan, Avg(IIf([mon]='Van',[DIEM],0)) AS Van
FROM DANHSACH INNER JOIN DIEM ON DANHSACH.MAHS = DIEM.MAHS
GROUP BY DANHSACH.MAHS, DANHSACH.HO, DANHSACH.TEN;

Nếu bạn muốn tính tổng điểm toán, văn thì thế hàm Avg bằng hàm Sum
Chữ ký của Noname 020
ღღღღღTài sản của Noname (View All Items) ღღღღღ
Reply
Những người đã cảm ơn casio262 , haquocquan
#14
(12-04-12, 03:19 PM)casio262 Đã viết: Đây là dữ liệu của bài đó
http://www.mediafire.com/?9yc0yv1gj3rxx2s
Bạn xem qua giúp mính nhá cái query1 đó sad
Nó vẫn hiện lên 2 dòng mà cùng một học sinh 52_52

SQL của query1 :
SELECT DISTINCT DANHSACH.MAHS, DANHSACH.HO, DANHSACH.TEN, Sum(IIf([mon]='Toan',[DIEM],0)) AS Toan, Sum(IIf([mon]='Van',[DIEM],0)) AS Van FROM DANHSACH INNER JOIN DIEM ON DANHSACH.MAHS = DIEM.MAHS
GROUP BY DANHSACH.MAHS, DANHSACH.HO, DANHSACH.TEN;

(12-04-12, 03:52 PM)Noname Đã viết: Sửa query của bạn thành thế này:
Mã:
SELECT DANHSACH.MAHS, DANHSACH.HO, DANHSACH.TEN, Avg(IIf([mon]='Toan',[DIEM],0)) AS Toan, Avg(IIf([mon]='Van',[DIEM],0)) AS Van
FROM DANHSACH INNER JOIN DIEM ON DANHSACH.MAHS = DIEM.MAHS
GROUP BY DANHSACH.MAHS, DANHSACH.HO, DANHSACH.TEN;

Nếu bạn muốn tính tổng điểm toán, văn thì thế hàm Avg bằng hàm Sum

Hàm sum mới đúng
Thân
Chữ ký của Xuân Thanh Trăm năm trước thì ta chưa gặp
Trăm năm sau biết gặp được không?
Cuộc đời sắc sắc không không
Thì thôi ta cứ hết lòng vì nhau
ღღღღღTài sản của Xuân Thanh (View All Items) ღღღღღ
Reply
Những người đã cảm ơn Noname , casio262 , haquocquan
#15
Các bạn làm đều đúng rùi.
Nhưng mình còn thắc mắc một chút đó là ở đây mình chỉ có một điểm Toán và 1 điểm Văn thui.
Không muốn tính tổng hay trung bình các điểm thì xóa lệnh sum, avg... trước nó đi lại bị lỗi nhỉ?
Cry_smileCry_smileCry_smile
Chữ ký của casio262 http://lequang.vn
Reply
Những người đã cảm ơn
#16
(12-04-12, 04:09 PM)casio262 Đã viết: Các bạn làm đều đúng rùi.
Nhưng mình còn thắc mắc một chút đó là ở đây mình chỉ có một điểm Toán và 1 điểm Văn thui.
Không muốn tính tổng hay trung bình các điểm thì xóa lệnh sum, avg... trước nó đi lại bị lỗi nhỉ?
Cry_smileCry_smileCry_smile

Nếu không muốn làm gộp thì tách ra như sau
1/ qryToan : SELECT DIEM.MAHS, IIf([Mon]="Toan",[DIEM],0) AS Toan FROM DIEM WHERE (((IIf([Mon]="Toan",[DIEM],0))>0));
2/ qryVan : SELECT DIEM.MAHS, IIf([Mon]="Van",[DIEM],0) AS Van FROM DIEM WHERE (((IIf([Mon]="Van",[DIEM],0))>0));
3/ qryTong : SELECT DANHSACH.MAHS, DANHSACH.HO, DANHSACH.TEN, qryToan.Toan, qryVan.Van FROM (qryToan INNER JOIN DANHSACH ON qryToan.MAHS = DANHSACH.MAHS) INNER JOIN qryVan ON DANHSACH.MAHS = qryVan.MAHS;

Hoặc
qryToan : SELECT DIEM.MAHS, DIEM.DIEM FROM DIEM WHERE (((DIEM.MON) Like "Toan"));
qryVan : SELECT DIEM.MAHS, DIEM.DIEM FROM DIEM WHERE (((DIEM.MON) Like "Van"));
qryTong : SELECT DANHSACH.MAHS, DANHSACH.HO, DANHSACH.TEN, qryToan.DIEM AS Toan, qryVan.DIEM AS Van FROM (qryToan INNER JOIN DANHSACH ON qryToan.MAHS = DANHSACH.MAHS) INNER JOIN qryVan ON DANHSACH.MAHS = qryVan.MAHS;
Chữ ký của Xuân Thanh Trăm năm trước thì ta chưa gặp
Trăm năm sau biết gặp được không?
Cuộc đời sắc sắc không không
Thì thôi ta cứ hết lòng vì nhau
ღღღღღTài sản của Xuân Thanh (View All Items) ღღღღღ
Reply
Những người đã cảm ơn
#17
Lúc đầu tưởng đơn giản nhưng mà cũng phức tạp ghê sad
Cảm ơn các bác đã giúp đỡ nhiều
Tongue_smileTongue_smileTongue_smileTongue_smile
Chữ ký của casio262 http://lequang.vn
Reply
Những người đã cảm ơn
#18
(12-04-12, 04:09 PM)casio262 Đã viết: Các bạn làm đều đúng rùi.
Nhưng mình còn thắc mắc một chút đó là ở đây mình chỉ có một điểm Toán và 1 điểm Văn thui.
Không muốn tính tổng hay trung bình các điểm thì xóa lệnh sum, avg... trước nó đi lại bị lỗi nhỉ?
Cry_smileCry_smileCry_smile

Trong query Groupby, các cột select nếu không được nhóm lại thì phải có một trong những hàm sau đi kèm:
Avg,Count,First, Last,Min, Max,StDev, Sum,Var

Nếu như bạn khẳng định chỉ có 1 dòng điểm cho mỗi môn ứng với mỗi học sinh thì dùng hàm nào trong số đó cũng đều có kết quả giống nhau. Phát biểu trước của mình sẽ lấy trung bình các điểm trong cùng môn, mà trung bình của mỗi 1 điểm thì bằng chính nó. Phát biểu của Xuân Thanh lấy tổng điểm, và tổng điểm của một điểm thì bằng chính nó.
Phát biểu như sau sẽ lấy về điểm đầu tiên của môn mà nó tìm thấy, trong trường hợp mỗi môn chỉ có 1 điểm thì cũng cho kết quả tương tự:
Mã:
SELECT DISTINCT DANHSACH.MAHS, DANHSACH.HO, DANHSACH.TEN, First(IIf([mon]='Toan',[DIEM],0)) AS Toan, First(IIf([mon]='Van',[DIEM],0)) AS Van
FROM DANHSACH INNER JOIN DIEM ON DANHSACH.MAHS = DIEM.MAHS
GROUP BY DANHSACH.MAHS, DANHSACH.HO, DANHSACH.TEN;
Chữ ký của Noname 020
ღღღღღTài sản của Noname (View All Items) ღღღღღ
Reply
Những người đã cảm ơn haquocquan
#19
Oh, bắt buộc phải đi kèm theo các câu lệnh đó thì mới trả về kết quả mình hiểu rùi.
Ah mà bác Noname cho em hỏi lúc đầu bác nói cái cách

1/ Crosstab query => dùng Thuật sĩ

Có nghĩa là gì vậy??? Em chưa biết mong bác giải thích cho rõ hơn chút được ko?
Chữ ký của casio262 http://lequang.vn
Reply
Những người đã cảm ơn
#20
(12-04-12, 05:16 PM)casio262 Đã viết: Oh, bắt buộc phải đi kèm theo các câu lệnh đó thì mới trả về kết quả mình hiểu rùi.
Ah mà bác Noname cho em hỏi lúc đầu bác nói cái cách

1/ Crosstab query => dùng Thuật sĩ

Có nghĩa là gì vậy??? Em chưa biết mong bác giải thích cho rõ hơn chút được ko?

Khi bạn tạo query mới, chọn Option Crosstab Query Wizard, Theo hướng dẫn của nó bạn sẽ có query tương tự thế này
Mã:
TRANSFORM Sum(DIEM.DIEM) AS SumOfDIEM
SELECT DANHSACH.HO, DANHSACH.TEN, DIEM.MAHS, Sum(DIEM.DIEM) AS [Total Of DIEM]
FROM DANHSACH INNER JOIN DIEM ON DANHSACH.MAHS = DIEM.MAHS
GROUP BY DANHSACH.HO, DANHSACH.TEN, DIEM.MAHS
PIVOT DIEM.MON;

Cách này ưu điểm là bạn có bao nhiêu môn nó sẽ chuyển hết bấy nhiêu môn sang hàng ngang cho bạn.
Chữ ký của Noname 020
ღღღღღTài sản của Noname (View All Items) ღღღღღ
Reply
Những người đã cảm ơn


Có thể liên quan đến chủ đề
Chủ đề: Tác giả Trả lời: Xem: Bài mới nhất
Question [Help] Cần giúp đỡ tạo query lấy giá trị của dòng liền trước để tính giá trị trung bình luonguct 4 86 23-11-16, 12:33 AM
Bài mới nhất: luonguct
  [Hỏi] cách lọc giá trị trên 2 trường khác nhau? hoanghai902 1 67 18-11-16, 09:27 AM
Bài mới nhất: vulhu06
  Xóa dữ liệu ở các bảng ChiMai 6 121 17-11-16, 05:12 PM
Bài mới nhất: Trần Linh
  [Help] Tính tổng theo điều kiện các trường trong nhiều table,đưa ra kết quả bignosevinatex 6 751 06-09-16, 10:56 PM
Bài mới nhất: maidinhdan
Photo CHUYỂN BẢNG Che_Guevara 4 183 25-07-16, 12:47 AM
Bài mới nhất: tt1212

Chuyển nhanh:


User(s) browsing this thread: 1 Guest(s)
Diễn Đàn Thơ Văn Thi Ẩm Lâu|Nhà Hàng Sông Thơ