Thắc mắc về query =.=" (2 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

nghichuyen

Thành viên mới
Tham gia
1/8/09
Bài viết
9
Được thích
1
Bác nào giúp em về mí cái query này với:**~****~****~****~**

-Liệt kê 2 loại gạo được bán nhiều nhất của tháng bất kỳ nhập vào.
-Liệt kê các loại gạo có cùng đặc điểm và giá bán.
-Liệt kê các hoá đơn ngày bán mà bán đồng thời 2 loại gạo Tài nguyên và Nàng hương.



CSDL gồm có:

KHACHHANG(MAKH,TENKH,DIACHI,DIENTHOAI)
LOAIGAO(MAGAO,TENGAO,DACDIEM,GIABAN)
HOADON(SOHD,NGAYBAN,MAKH,QUATANG)
CTHD(SOHD,MAGAO,SOKG,GIAM)


Em xin cám ơn các Bác nhiều ạ !!%#^#$%#^#$%#^#$%#^#$%#^#$%#^#$
 

File đính kèm

-Liệt kê 2 loại gạo được bán nhiều nhất của tháng bất kỳ nhập vào.
Trả lời 1:
[highlight=VB]
SELECT TOP 2 CTHD.MAGAO, LOAIGAO.TENGAO, Sum(CTHD.SOKG) AS TongSoKG, Month([NGAYBAN]) AS THANG
FROM LOAIGAO INNER JOIN (HOADON INNER JOIN CTHD ON HOADON.SOHD = CTHD.SOHD) ON LOAIGAO.MAGAO = CTHD.MAGAO
WHERE (((Month([NGAYBAN]))=[Thang]))
GROUP BY CTHD.MAGAO, LOAIGAO.TENGAO, Month([NGAYBAN]);
[/highlight]-----------------------------------------

-Liệt kê các loại gạo có cùng đặc điểm và giá bán.
Trả lời 2:
[highlight=VB]
SELECT LOAIGAO.MAGAO, LOAIGAO.TENGAO, LOAIGAO.DACDIEM, LOAIGAO.GIABAN
FROM LOAIGAO
INNER JOIN
(
SELECT LOAIGAO.DACDIEM, LOAIGAO.GIABAN, Count(LOAIGAO.DACDIEM) AS myRef1, Count(LOAIGAO.GIABAN) AS myref2
FROM LOAIGAO
GROUP BY LOAIGAO.DACDIEM, LOAIGAO.GIABAN
HAVING (((Count(LOAIGAO.DACDIEM))>1) AND ((Count(LOAIGAO.GIABAN))>1))
) AS A
ON LOAIGAO.DACDIEM = A.DACDIEM and LOAIGAO.GIABAN = A.GIABAN
[/highlight]-------------------------------------------------------------------
-Liệt kê các hoá đơn ngày bán mà bán đồng thời 2 loại gạo Tài nguyên và Nàng hương.
Trả lời 3:
[highlight=VB]
SELECT A.SOHD, A.NGAYBAN,COUNT(A.SOHD) AS MYREF
FROM
(
SELECT CTHD.SOHD,HOADON.NGAYBAN
FROM CTHD INNER JOIN HOADON ON CTHD.SOHD = HOADON.SOHD
WHERE CTHD.MAGAO = "G01"

UNION ALL

SELECT CTHD.SOHD,HOADON.NGAYBAN
FROM CTHD INNER JOIN HOADON ON CTHD.SOHD = HOADON.SOHD
WHERE CTHD.MAGAO = "G03"
) AS A
GROUP BY A.SOHD, A.NGAYBAN
HAVING COUNT(A.SOHD)>1
[/highlight]
 

File đính kèm

Lần chỉnh sửa cuối:
Cám ơn bác cadafi nhiều lắm. Bài trả lời của bác rất hay ý ^^
 
-Liệt kê các hoá đơn ngày bán mà bán đồng thời 2 loại gạo Tài nguyên và Nàng hương.

Câu này em có cách làm như thế ko biết có đúng ko nữa. Bác cadafi xem lại dùm em thử xem nhá --=0--=0--=0--=0

Cám ơn bác cadafi nhiều lắm @$@!^%@$@!^%@$@!^%

-=.,,-=.,,-=.,,

SELECT CTHD.SOHD, HOADON.NGAYBAN
FROM HOADON INNER JOIN CTHD ON HOADON.SOHD = CTHD.SOHD
WHERE (((CTHD.SOHD) In (select hoadon.sohd from cthd inner join hoadon on cthd.sohd=hoadon.sohd where cthd.magao="G03")) AND ((CTHD.MAGAO)="G01"));
 
SELECT CTHD.SOHD, HOADON.NGAYBAN
FROM HOADON INNER JOIN CTHD ON HOADON.SOHD = CTHD.SOHD
WHERE (((CTHD.SOHD) In (select hoadon.sohd from cthd inner join hoadon on cthd.sohd=hoadon.sohd where cthd.magao="G03")) AND ((CTHD.MAGAO)="G01"));

Đúng hay không bác cho nó chạy là biết ngay mà, cần gì hỏi! Cách của bác cũng cùng 1 thuật giải với bài của mình bên dưới, nhưng mình viết như vậy để mọi người thấy từng bước xử lý của query. Đoạn của bạn thì rút ngắn lại bằng cách "đặt thừa số chung". Cách của bạn ngắn và hay hơn! }}}}}
 
mình thấy cho kết quả là: HD01 và HD04 là đúng đấy chứ!
 
Lần chỉnh sửa cuối:
Cám ơn bác cadafi nhiều nha @$@!^%@$@!^%@$@!^%

Có điều câu thứ 2 (liệt kê gạo cùng đặc điểm và giá bán), em vẫn ko hiểu sao mà trong chế độ design view lại có thêm 1 cái table (a).Em vẫn chưa hiểu tại sao lại xuất hiện cái table ý, mà nếu ko có table (a) ý thì có sao ko? Có lẽ bác cadafi thiết kế trong chế độ SQL view, thế nếu mình chỉ làm trong cái chế độ design view thì câu số 2 fải làm như thế nào nhỉ? Làm sao để xuất hiện cái table (a) đó??+-+-+-++-+-+-++-+-+-+

Nhân tiện đây cho em hỏi thêm 1 câu truy vấn:|||||||||||||||


-Liệt kê tháng, tên gạo mà có tổng số kg bán nhiều nhất trong mỗi tháng.

(cùng CSDL KDGAO)!$@!!


 
-Liệt kê tháng, tên gạo mà có tổng số kg bán nhiều nhất trong mỗi tháng.

Trả lời 4 (Chưa phải là tối ưu nha):

[highlight=vb]
SELECT B.THANG, C.MAGAO, B.MAXTONGSOKG
FROM
(
SELECT A.THANG, Max(A.TONGSOKG) AS MAXTONGSOKG
FROM
(
SELECT MONTH(HOADON.NGAYBAN) AS THANG,CTHD.MAGAO, SUM(CTHD.SOKG) AS TONGSOKG
FROM HOADON INNER JOIN CTHD ON HOADON.SOHD=CTHD.SOHD
GROUP BY MONTH(HOADON.NGAYBAN),CTHD.MAGAO
) AS A
GROUP BY A.THANG
) AS B
INNER JOIN
(
SELECT MONTH(HOADON.NGAYBAN) AS THANG,CTHD.MAGAO, SUM(CTHD.SOKG) AS TONGSOKG
FROM HOADON INNER JOIN CTHD ON HOADON.SOHD=CTHD.SOHD
GROUP BY MONTH(HOADON.NGAYBAN),CTHD.MAGAO
) AS C
ON B.THANG=C.THANG AND B.MAXTONGSOKG = C.TONGSOKG
[/highlight]---------------------------------------------------------------------------------------------------------------

Có điều câu thứ 2 (liệt kê gạo cùng đặc điểm và giá bán), em vẫn ko hiểu sao mà trong chế độ design view lại có thêm 1 cái table (a).Em vẫn chưa hiểu tại sao lại xuất hiện cái table ý, mà nếu ko có table (a) ý thì có sao ko? Có lẽ bác cadafi thiết kế trong chế độ SQL view, thế nếu mình chỉ làm trong cái chế độ design view thì câu số 2 fải làm như thế nào nhỉ? Làm sao để xuất hiện cái table (a) đó??
Đây là câu query lồng, table a mà bạn thấy chẳng qua là 1 bảng query chứ không có thực. Muốn làm trong cái chế độ design view thì câu số hai phải tách ra làm 2 câu query

Thay vì:
[highlight=vb]
SELECT LOAIGAO.MAGAO, LOAIGAO.TENGAO, LOAIGAO.DACDIEM, LOAIGAO.GIABAN
FROM LOAIGAO
INNER JOIN
(
SELECT LOAIGAO.DACDIEM, LOAIGAO.GIABAN, Count(LOAIGAO.DACDIEM) AS myRef1,
Count(LOAIGAO.GIABAN) AS myref2
FROM LOAIGAO
GROUP BY LOAIGAO.DACDIEM, LOAIGAO.GIABAN
HAVING (((Count(LOAIGAO.DACDIEM))>1) AND ((Count(LOAIGAO.GIABAN))>1))
) AS A
ON LOAIGAO.DACDIEM = A.DACDIEM and LOAIGAO.GIABAN = A.GIABAN
[/highlight]

Thì thay bằng:

Qry01:
[highlight=vb]
SELECT LOAIGAO.DACDIEM, LOAIGAO.GIABAN, Count(LOAIGAO.DACDIEM) AS myRef1, Count(LOAIGAO.GIABAN) AS myref2
FROM LOAIGAO
GROUP BY LOAIGAO.DACDIEM, LOAIGAO.GIABAN
HAVING (((Count(LOAIGAO.DACDIEM))>1) AND ((Count(LOAIGAO.GIABAN))>1))
[/highlight]

Qry02:
[highlight=vb]
SELECT LOAIGAO.MAGAO, LOAIGAO.TENGAO, LOAIGAO.DACDIEM, LOAIGAO.GIABAN
FROM LOAIGAO INNER JOIN Qry01 ON LOAIGAO.DACDIEM = Qry01.DACDIEM AND LOAIGAO.GIABAN = Qry01.GIABAN
[/highlight]Tôi thắc mắc là với khả năng xử lý câu 3 của bạn như vậy mà lại hỏi những câu như thế này!? Bạn muốn hỏi thực sự hay muốn đánh đố người khác vậy!?
 

File đính kèm

Lần chỉnh sửa cuối:
Thanks bác cadafi nhiều nha. Giờ thì em đã hiểu --=0--=0--=0--=0
 
Bác cadafi giúp em câu truy vấn này với...!$@!!!$@!!!$@!! Dưới đây là CSDL của nó.

- Liệt kê mã khách hàng, tên khách hàng, tên cửa, tổng tiền cửa mà có trị giá cao nhất của mỗi khách hàng đó.

Em cám ơn bác cadafi nhiều trước -=.,,-=.,,-=.,,
 

File đính kèm

- Liệt kê mã khách hàng, tên khách hàng, tên cửa, tổng tiền cửa mà có trị giá cao nhất của mỗi khách hàng đó.

Chưa hiểu ý lắm, nhưng bạn thử đoạn query bên dưới xem sao.
[highlight=VB]
SELECT KHACH_HANG.MAKH, KHACH_HANG.TENKH, LOAI_CUA.TENCUA, B.MAXSOTIEN
FROM
(
SELECT A.MADDH, A.MALC, MAX(A.SOTIEN) as MAXSOTIEN
FROM
(
SELECT CT_DDH.MADDH, CT_DDH.MALC, Sum([SL]*[GiaBan]) AS SoTien
FROM LOAI_CUA INNER JOIN CT_DDH ON LOAI_CUA.MALC = CT_DDH.MALC
GROUP BY CT_DDH.MADDH, CT_DDH.MALC
) AS A
GROUP BY A.MADDH, A.MALC
) AS B, KHACH_HANG, LOAI_CUA, DDH
WHERE B.MADDH = DDH.MADDH AND DDH.MAKH = KHACH_HANG.MAKH AND B.MALC = LOAI_CUA.MALC
[/highlight]
 

File đính kèm

Cám ơn bác cadafi nhiều nhiều.@$@!^%@$@!^%@$@!^%

Câu này ý là liệt kê tên từng khách hàng có tổng tiền cửa mỗi loại cửa. Đem so sánh chọn ra loại cửa có tổng tiền cao nhất của mỗi khách hàng. Theo em hiểu là như thế **~****~****~**
 
chua thật hiểu ý bạn
tôi sẽ giải thích chút nhé.
ở đây sẽ liệt kê tổng số tiến của từng loại cửa mà khách hành tham gia giao dịch.

SELECT KHACH_HANG.MAKH, KHACH_HANG.TENKH, LOAI_CUA.TENCUA, max([sl]*[giaban]) AS tien
FROM LOAI_CUA INNER JOIN (KHACH_HANG INNER JOIN (DDH INNER JOIN CT_DDH ON DDH.MADDH = CT_DDH.MADDH) ON KHACH_HANG.MAKH = DDH.MAKH) ON LOAI_CUA.MALC = CT_DDH.MALC;
 
chua thật hiểu ý bạn
tôi sẽ giải thích chút nhé.
ở đây sẽ liệt kê tổng số tiến của từng loại cửa mà khách hành tham gia giao dịch.

SELECT KHACH_HANG.MAKH, KHACH_HANG.TENKH, LOAI_CUA.TENCUA, max([sl]*[giaban]) AS tien
FROM LOAI_CUA INNER JOIN (KHACH_HANG INNER JOIN (DDH INNER JOIN CT_DDH ON DDH.MADDH = CT_DDH.MADDH) ON KHACH_HANG.MAKH = DDH.MAKH) ON LOAI_CUA.MALC = CT_DDH.MALC;
Bạn test đoạn query của bạn trước khi đưa lên chưa vậy??
 
Có vẻ là bị lỗi ko chạy dc nhưng dù sao cũng cảm ơn bác comaynz nhiều ^.^
 
Theo em, cái query này nó sẽ thế này:+-+-+-++-+-+-++-+-+-+

SELECT KHACH_HANG.MAKH, KHACH_HANG.TENKH, LOAI_CUA.TENCUA, [ngang]*[cao]*[sl]*[giaban] AS Tongtien
FROM LOAI_CUA INNER JOIN (KHACH_HANG INNER JOIN (DDH INNER JOIN CT_DDH ON DDH.MADDH = CT_DDH.MADDH) ON KHACH_HANG.MAKH = DDH.MAKH) ON LOAI_CUA.MALC = CT_DDH.MALC;

Nhưng vấn đề làm sao để liệt kê ra tổng tiền của loại cửa mà mỗi khách hàng mua lớn nhất.!$@!!!$@!!!$@!!!$@!!


Ví dụ: Khách hàng Lê Hải Việt ,tên cửa là gỗ với tổng tiền là 3200000, khách hàng Trần Vinh Huy, tên cửa là Nhôm với tổng tiền là 1440000 v.v...

Các bác ai biết chỉ giúp em với....-+*/-+*/-+*/
 

File đính kèm

Web KT

Bài viết mới nhất

Back
Top Bottom