SQL...help

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

levanduyet

Welcome
16/10/04
535
11
18
HCM
my.opera.com
#1
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
 
L

Longlv

Thành viên sơ cấp
21/10/05
44
1
8
41
Hanoi
#2
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

Thành viên sơ cấp
30/11/05
57
0
0
34
đà nẵng
www.hvcpro.com
#3
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:
L

levanduyet

Welcome
16/10/04
535
11
18
HCM
my.opera.com
#4
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
7/11/02
1,950
335
83
45
TP.HCM
www.taman.com.vn
#5
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
548
51
28
41
Hà Nội
www.bluesofts.net
#6
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.
 
L

levanduyet

Welcome
16/10/04
535
11
18
HCM
my.opera.com
#7
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

Thành viên thân thiết
10/11/05
286
10
18
Đà nẵng
#8
Để 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!
 
L

levanduyet

Welcome
16/10/04
535
11
18
HCM
my.opera.com
#9
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,012
125
63
44
Hà nội
vnuni.net
#10
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 à?
 
L

levanduyet

Welcome
16/10/04
535
11
18
HCM
my.opera.com
#11
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

Thành viên sơ cấp
22/7/05
372
0
0
46
Ho Chi Minh
#12
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ổ.
 
L

levanduyet

Welcome
16/10/04
535
11
18
HCM
my.opera.com
#13
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,012
125
63
44
Hà nội
vnuni.net
#14
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

Thành viên sơ cấp
22/7/05
372
0
0
46
Ho Chi Minh
#15
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

Thành viên sơ cấp
22/7/05
372
0
0
46
Ho Chi Minh
#16
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,012
125
63
44
Hà nội
vnuni.net
#17
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.
 
L

levanduyet

Welcome
16/10/04
535
11
18
HCM
my.opera.com
#18
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
 

BQT trực tuyến

  • HungTV
    HungTV
    Quản trị viên / Admin

Thành viên trực tuyến

  • LÊ THỊ KIỀU DUYÊN
  • Rong vua
  • HungTV
  • hieutv03

Xem nhiều