SQL...help

  • Thread starter levanduyet
  • Ngày gửi
levanduyet

levanduyet

Welcome
16/10/04
537
19
18
HCM
my.opera.com
Chào các bạn,
Tôi có một bảng trong Access, các trường gồm có:
1. Item code
2. Description
3. Unit
4. Quantity
5. Issue date
6. Issue documents
7. Period
Vậy thì mình dùng câu lệnh SQL nào để trả về:
Từ ngày "X" đến ngày "Y", với một Item code thì số lượng "Issue" là bao nhiêu.
Tôi muốn trả về các trường:
1. Item code
2. Description
3. Unit
4. Sum (Quantity)
5. Issue date (From "X" date to "Y" date)

Mong các bạn biết giúp đỡ.
Thân,

Lê Văn Duyệt
 
Khóa học Quản trị dòng tiền
L

Longlv

Sơ cấp
21/10/05
44
1
8
46
Hanoi
levanduyet nói:
Chào các bạn,
Tôi có một bảng trong Access, các trường gồm có:
1. Item code
2. Description
3. Unit
4. Quantity
5. Issue date
6. Issue documents
7. Period
Vậy thì mình dùng câu lệnh SQL nào để trả về:
Từ ngày "X" đến ngày "Y", với một Item code thì số lượng "Issue" là bao nhiêu.
Tôi muốn trả về các trường:
1. Item code
2. Description
3. Unit
4. Sum (Quantity)
5. Issue date (From "X" date to "Y" date)

Mong các bạn biết giúp đỡ.
Thân,

Lê Văn Duyệt

Không biết thế này có đúng ý bác không, bác thử lại xem nhé:

SELECT [Item code],
[Description],
[Unit],
Sum(IIf(DATA![Issue date]>=#X# And DATA![Issue date]<=#Y#, [Quantity],0)) AS [Sum],
"From" & X & "to" & Y & " AS [Issue date]
FROM Data
GROUP BY [Item code],[Description], [Unit], "From" & X & "to" & Y;
 
H

hoangvudb

Guest
30/11/05
57
0
0
39
đà nẵng
www.hvcpro.com
SELECT Item code, Description, Unit, Sum (Quantity), <câu lệnh sum như trên>

bạn cũng có thể dùng lệnh BETWEEN để lấy Từ ngày "X" đến ngày "Y",

mà khi đặt tên cho các trường ko nên để cách ra như vậy, có khi MSaccess báo lỗi đấy
 
Sửa lần cuối:
levanduyet

levanduyet

Welcome
16/10/04
537
19
18
HCM
my.opera.com
hoangvudb nói:
SELECT Item code, Description, Unit, Sum (Quantity), <câu lệnh sum như trên>

bạn cũng có thể dùng lệnh BETWEN để lấy Từ ngày "X" đến ngày "Y",

mà khi đặt tên cho các trường ko nên để cách ra như vậy, có khi MSaccess báo lỗi đấy
Sao tôi thử không được bạn ơi. Help...
Thân,
LVD
 
HaiTam

HaiTam

Nguyễn Hải Tâm
Thành viên BQT
7/11/02
2,177
594
113
TP.HCM
www.webketoan.vn
Anh Duyệt xem cái này có đúng ý anh không ? HaiTam làm đơn giản từ từ Query chuyển qua thôi.

SELECT Table1.Itemcode, Table1.Description, Table1.Unit, Sum(Table1.Quantity) AS SumOfQuantity FROM Table1 WHERE (((Table1.Issuedate) Between "X" And "Y")) GROUP BY Table1.Itemcode, Table1.Description, Table1.Unit;
 
T

Tuanktcdcn

Lão già ham vui
18/6/04
549
52
28
47
Hà Nội
www.bluesofts.net
HaiTam nói:
Anh Duyệt xem cái này có đúng ý anh không ? HaiTam làm đơn giản từ từ Query chuyển qua thôi.

SELECT Table1.Itemcode, Table1.Description, Table1.Unit, Sum(Table1.Quantity) AS SumOfQuantity FROM Table1 WHERE (((Table1.Issuedate) Between "X" And "Y")) GROUP BY Table1.Itemcode, Table1.Description, Table1.Unit;

Trong MS SQL, giá trị Date hình như phải đặt trong dấu (#)
#Date#
MS SQL em chưa dùng bao giờ, chỉ căn cứ SQL từ ngôn ngữ khác thôi.
 
levanduyet

levanduyet

Welcome
16/10/04
537
19
18
HCM
my.opera.com
HaiTam nói:
Anh Duyệt xem cái này có đúng ý anh không ? HaiTam làm đơn giản từ từ Query chuyển qua thôi.

SELECT Table1.Itemcode, Table1.Description, Table1.Unit, Sum(Table1.Quantity) AS SumOfQuantity FROM Table1 WHERE (((Table1.Issuedate) Between "X" And "Y")) GROUP BY Table1.Itemcode, Table1.Description, Table1.Unit;
Cám ơn Tâm,
Câu SQL của anh như thế này
sSQL = "SELECT Item_code_TNT, Unit, Sum(Real_qty) as [Total_sale]" & _
" FROM tb_Data" & _
" WHERE Issue_doc_date >= #" & dteDate1 & "# AND " & "Issue_doc_date <= " & "#" & dteDate2 & "#" & _
" GROUP BY Item_code_TNT, Unit" & _
" ORDER BY Item_code_TNT ;"
Nhưng nó gặp vấn đề là nếu dteDate2 nhỏ hơn dteDate1 thì nó vẫn không có tác dụng.
Thân,

Lê Văn Duyệt
 
HongViet

HongViet

Cao cấp
10/11/05
286
10
18
Đà nẵng
Để query phụ giúp cho, cũng được

Bác Duyệt cú vô ngăn Query & tiến hành lập theo í mình; Xong rồi vô cửa sổ SQL mà đọc xem Ô. B viết ra răng?! :1luvu:
Vạn sự khởi đầu nan!
 
levanduyet

levanduyet

Welcome
16/10/04
537
19
18
HCM
my.opera.com
Cám ơn các bạn

HongViet nói:
Bác Duyệt cú vô ngăn Query & tiến hành lập theo í mình; Xong rồi vô cửa sổ SQL mà đọc xem Ô. B viết ra răng?! QUOTE]
Chào các bạn,
Cám ơn các bạn nhiều. Mình phải "luyện nội công" vấn đề này hổm rày! Càng luyện càng thích! (Lại phải chạy đi tìm sách nữa!!!)
Tất cả đều nhanh cực kỳ. Làm việc trên mạng LAN hay Internet cũng OK.
Các báo cáo...hết xảy...
Bây giờ thì cảm thấy SQL sao mà đã quá, ADO càng hay.
Thân,

Lê Văn Duyệt
 
hai2hai

hai2hai

VNUNI Makes a difference
29/4/04
2,032
125
63
50
Hà nội
vnuni.net
Hê hê, bây giờ người ta chuyển hết sang món khác rồi mà anh (nhưng vẫn của Mr BillM$ là chính:)). Anh ko thấy dân tình đang quảng cáo ầm ầm trên wkt à?
 
levanduyet

levanduyet

Welcome
16/10/04
537
19
18
HCM
my.opera.com
Trời

hai2hai nói:
Hê hê, bây giờ người ta chuyển hết sang món khác rồi mà anh (nhưng vẫn của Mr BillM$ là chính:)). Anh ko thấy dân tình đang quảng cáo ầm ầm trên wkt à?
Hu hu hu, vậy anh phải chấp nhận đi sau thời đại thôi !!! No choice !

Lê Văn Duyệt
 
W

workman

Guest
22/7/05
372
2
0
51
Ho Chi Minh
Bác Duyệt dạo này khoái SQL rồi hả. Dữ liệu của bác lưu ở Access hay là trên SQL server?
Cũng gọi là SQL nhưng ngôn ngữ sử dụng trong Access có hơi khác so với SQL truyền thống.
Em đoán là bác đang dùng SQL server, vì thấy bác khen nó chạy nhanh.

Thực ra để làm các báo cáo phức tạp, nhất là các báo cáo phân tích dữ liệu lớn thì SQL là biện pháp tốt nhất. Lưới query của Access không giải quyết được những vấn đề phức tạp. Hơn nữa các dữ liệu vài trăm đến trên 1 triệu dòng được SQL Server xử lý trong vài chục giây, còn nếu dùng Access thì đợi dài cổ.
 
levanduyet

levanduyet

Welcome
16/10/04
537
19
18
HCM
my.opera.com
workman nói:
Bác Duyệt dạo này khoái SQL rồi hả. Dữ liệu của bác lưu ở Access hay là trên SQL server?
Cũng gọi là SQL nhưng ngôn ngữ sử dụng trong Access có hơi khác so với SQL truyền thống.
Em đoán là bác đang dùng SQL server, vì thấy bác khen nó chạy nhanh.

Thực ra để làm các báo cáo phức tạp, nhất là các báo cáo phân tích dữ liệu lớn thì SQL là biện pháp tốt nhất. Lưới query của Access không giải quyết được những vấn đề phức tạp. Hơn nữa các dữ liệu vài trăm đến trên 1 triệu dòng được SQL Server xử lý trong vài chục giây, còn nếu dùng Access thì đợi dài cổ.
Welcome workman back to EFC. Anh đang "ADO for Dummies" và cảm thấy hay quá trời.
LVD
 
hai2hai

hai2hai

VNUNI Makes a difference
29/4/04
2,032
125
63
50
Hà nội
vnuni.net
workman nói:
Thực ra để làm các báo cáo phức tạp, nhất là các báo cáo phân tích dữ liệu lớn thì SQL là biện pháp tốt nhất. Lưới query của Access không giải quyết được những vấn đề phức tạp. Hơn nữa các dữ liệu vài trăm đến trên 1 triệu dòng được SQL Server xử lý trong vài chục giây, còn nếu dùng Access thì đợi dài cổ.

Còn phụ thuộc vào viết như thế nào nữa. hai2hai vẫn hay viết VB + MS SQL (chứ ko phải SQL, vì nếu nói SQL thì đó là ngôn ngữ) và viết VB + .MDB với dữ liệu cũng tính đến vài trăm ngàn hoặc ~triệu bản ghi. Tốc độ ko khác nhau nhiều lắm (nhưng mà ai nói triệu bản ghi trong vài chục giây thì đúng là MS cũng phải mơ đấy, thử hiện 500 ngàn bản ghi lên grid xem sao nhé :)). Nhiều khi là do cách sử dụng index, cách thiết kế DL ko bị thừa, sử dụng Grid cực mạnh, tối ưu hóa từng dòng code, v.v...
 
Sửa lần cuối:
W

workman

Guest
22/7/05
372
2
0
51
Ho Chi Minh
hai2hai nói:
Còn phụ thuộc vào viết như thế nào nữa. hai2hai vẫn hay viết VB + MS SQL (chứ ko phải SQL, vì nếu nói SQL thì đó là ngôn ngữ) và viết VB + .MDB với dữ liệu cũng tính đến vài trăm ngàn hoặc ~triệu bản ghi. Tốc độ ko khác nhau nhiều lắm (nhưng mà ai nói triệu bản ghi trong vài chục giây thì đúng là MS cũng phải mơ đấy, thử hiện 500 ngàn bản ghi lên grid xem sao nhé :)). Nhiều khi là do cách sử dụng index, cách thiết kế DL ko bị thừa, sử dụng Grid cực mạnh, tối ưu hóa từng dòng code, v.v...
Thời buổi này phải quảng cái mới có ăn chứ hì hì. :)

Thật ra khi viết SQL để chạy trực tiếp trên server như SQL hoặc AS400, tốc độ xử lý các query nhanh không thể tưởng được. Để lọc dữ liệu từ table vài trăm ngàn dòng, tôi tính ra chỉ mất chưa đến 1 phút.
 
W

workman

Guest
22/7/05
372
2
0
51
Ho Chi Minh
levanduyet nói:
Welcome workman back to EFC. Anh đang "ADO for Dummies" và cảm thấy hay quá trời.
LVD
Bác Duyệt chịu khó nhỉ. Chắc bữa nào em mượn sách của bác tham khảo ké. Emmới chỉ dừng lại ở mấy câu query trên SQL server thôi, chưa đi sâu vào ADO. Thấy mấy câu lệnh ADO dài thoòng mà wải quá.
 
hai2hai

hai2hai

VNUNI Makes a difference
29/4/04
2,032
125
63
50
Hà nội
vnuni.net
workman nói:
Thời buổi này phải quảng cái mới có ăn chứ hì hì. :)

Thật ra khi viết SQL để chạy trực tiếp trên server như SQL hoặc AS400, tốc độ xử lý các query nhanh không thể tưởng được. Để lọc dữ liệu từ table vài trăm ngàn dòng, tôi tính ra chỉ mất chưa đến 1 phút.

He he, workman nói mà tớ lại cứ ngỡ sao lại có món MS SQL chạy trên ... AS400 của IBM ?!?

SQL là 1 ngôn ngữ truy vấn, còn MS SQL của Microsoft là 1 Database System, wm phải viết rõ ra chứ :).

Để lọc vài trăm ngàn records đó là do wm thực hiện trực tiếp trên công cụ của MS SQL đó thôi. WM cứ thử đẩy nó lên Grid nào đó trên 1 môi trường lập trình nào khác hoặc lên trang web đi xem thế nào (nếu ko sử dụng paging thì chắc là ko ai chờ đợi hàng triệu bản ghi đang loading cả). Chứ chỉ SELECT ID FROM Table1 trên công cụ của nó thôi thì nhanh lắm.
 
levanduyet

levanduyet

Welcome
16/10/04
537
19
18
HCM
my.opera.com
Lâu quá mới vào lại WKT, bây giờ mình thấy câu hỏi của mình lúc trước...ngộ quá.
Mình đã có viết bài cơ bản về SQL, các bạn có thể tham khảo tại đây (chỉ dành cho newbee thôi )
Tham khảo tại đây.

Lê Văn Duyệt
 

Xem nhiều

Webketoan Zalo OA