PDA

View Full Version : hỏi về query trong SQL server



denmilu
20-07-2008, 23:12
Mình có 1 bài tập thế này: Cho 1 hệ CSDL ABC gồm các table mã hàng, tên mặt hàng, ngày nhập hàng, ngày xuất hàng, tên người nhập hàng, tên người xuất hàng. Trong đó ngày nhập và ngày xuất có cấu trúc: ngày+tháng+năm+số thứ tự xuất/nhập
ví dụ:
Ngày xuất: 572008123 có nghĩa là ngày 5/7/2008 và thứ tự xuất là 123
Ngày nhập: 121020084567 ngày nhập là 12/10/2008 và thứ tự nhập 4567

Yêu cầu đặt ra là viết câu query để hiển thị tất cả mã hàng + tên mặt hàng + tên người xuất hàng + ngày xuất trong vòng 1 tháng xác định nào đó ( từ ngày 1 -30 của tháng đó) như kiểu xem trong tháng 7 từ 172008 đến 3072008 đã có những mặt hàng nào đã được xuất và in hết ra như yêu cầu.

Mong bạn nào rành về môn này giúp mình. Chân thành cảm ơn!

phatnq2003
21-07-2008, 15:28
Cái kiểu thiết kế ngày nhập và ngày xuất như vậy chỉ có nước khóc, bởi vì độ dài của ngày nhập hay ngày xuất không có một fix length cố định ít nhất là cho phần ngày tháng năm. Vậy lấy gì mà tách chuỗi ra để xử lý?

Thứ hai bạn nói "gồm các table mã hàng, tên mặt hàng, ngày nhập hàng, ngày xuất hàng, tên người nhập hàng, tên người xuất hàng", vậy là sao? Ít ra cấu trúc phải như thế nào, quan hệ giữa chúng ra sao nữa chứ?

Bạn nói lại cho rõ đi.

vqt
22-07-2008, 10:40
Nói thật là thấy những kiểu dữ liệu dạng combo như trường ngày nhập / ngày xuất như trên là tôi cảm thấy bức xúc. Cái cách ghép nối giá trị nhiều trường vào làm 1 như trên thật cổ xưa làm sao. Tại sao lại phức tạp hóa vấn đề như vậy nhỉ. Ngày xưa giá bộ nhớ còn đắt, ứng dụng còn đơn giản nên người ta mới ghép như vậy. Còn ngày nay giá bộ nhớ rẻ rề. Giới hạn số trường trong bảng cực lớn. Vậy ghép nối để làm gì. Chỉ tổ tốn thời gian phân tích, tổng hợp cái trường đó ở mọi thao tác tạo mới hay đọc dữ liệu. Hơn nữa nó là trường kiểu chuỗi (chắc thế) nên so sánh, sắp xếp, lập chỉ số sẽ theo kiểu chuỗi (tức là từ trái qua phải) sẽ loạn cả lên.

denmilu
23-07-2008, 22:54
cảm ơn 2 bạn đã quan tâm, thật ra đây là 1 yêu cầu và mình phải làm theo, nhưng phải nói thật nó quá kém linh động, vì ví dụ như ngày 11/2/2008 có khi viết liền lại là 1122008*** nó cũng sẽ bị hiểu nhầm là ngày 1/12/2008 như vậy câu truy vấn sẽ gặp vấn đề, đúng không? Nhưng yêu cầu đặt ra là vậy. mình cũng không thể giải quyết được kiểu này, nên mới hỏi mọi người

nguyen_lan2005
24-07-2008, 11:30
vấn dề này thực tế cũng có ứng dụng sử dụng nhưng với nhiều quy định khác nhau. Đây là kỹ thuật hay, cách giải quyết cũng đơn giản. Bạn phân tích các cột và xử lý chuỗi... Thật tiện lợi và đơn giản hơn nếu bạn rõ một ngôn ngữ lập trình .
======================
www.becivn.net
www.nguyenlan.net
YH Nick: lanit_itec

=============
Thời buổi thị trường: Thời gian là đô la ($), là Việt Nam đồng (VND)

denmilu
24-07-2008, 23:50
@Nguyen_lan05 mình đang hỏi về vấn đề query trong SQL mà, nên không nói đến lập trình về việc đọc chuỗi hay đếm chuỗi, và cái chuỗi của mình nó cũng không đơn giản như bạn nghĩ, bởi vì ngày tháng trong đó nó lộn xộn có khi là 8 số, có khi là 6 hay 7 số,
Lúc trước mình có nghĩ đến cách lấy bằng cách hiển thị ngày xuất theo thứ tự từ nhỏ đến lớn, nhưng vướng phải cái ngày tháng ở đầu tiên nên ko thực hiện được, tớ cũng đã thử cách loại suy theo câu lệnh "ngayxuat not in(số ngày xuất đã lấy được) Cách này thì thực hiện được, nhưng khi lên đến số lượng lớn nó sẽ không thể truy xuất được do lượng dữ kiệu quá nhiều :(

phamduyvt
25-07-2008, 15:06
Phân tích bài này
Giá trị trong cột ngày là chưa đồng nhất
bạn nên đặt giá trị ngày tháng năm là 8 số
ví dụ: 05072008123 ngày 5 tháng 7 năm 2008 thứ tự 123
011020081234 ngày 1 tháng 10 năm 2008 thứ tự 1234
Như thế sẽ rất dễ dàng cho việc query bằng cách kết hợp and, or, like
vào trong câu lệnh sql

nguyen_lan2005
25-07-2008, 15:41
Do bạn phân tích thiết kế, chưa đủ "đô" để làm mà thôi.
Trả tiền tôi làm cho. Thời gian là đô la, là việt Nam đồng.
==================
www.becivn.net

denmilu
25-07-2008, 21:14
@phamduyvt : thank bạn nha, thật ra để chuỗi ngày tháng năm là 8 chữ số thì mình cũng nghĩ đến, nhưng nó lại không phải yêu cầu mà người ta đặt ra cho mình :( . Chắc phải thuơng lượng lại vấn đề này.
@nguyen_lan2005 : Mình phân tích chắc không hoàn thiện hết, nhưng có thể nói khá chặt, chỉ vướng mỗi vấn đề query chỗ đó thôi, chỉ cần bạn góp ý cho mình 2 giải pháp thôi, tiền thì :D ...

kimhuong2212
06-04-2010, 20:59
Viết câu query xuất ra những thông tin của các công ty trong web quảng cáo

nguoitamky
06-10-2010, 10:04
Vấn đề chủ topic nêu ra khó giải quyết quá nhỉ? Nếu rơi vào trường hợp của mình chắc cũng đuối :(