SQL...help

Thảo luận trong 'Ứng dụng Excel' bắt đầu bởi levanduyet, 25 Tháng hai 2006.

5,643 lượt xem

  1. levanduyet

    levanduyet Welcome

    Bài viết:
    535
    Đã được thích:
    11
    Giới tính:
    Nam
    Nơi ở:
    HCM
    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
     
    #1
  2. Longlv

    Longlv Thành viên hoạt động

    Bài viết:
    44
    Đã được thích:
    1
    Nơi ở:
    Hanoi
    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;
     
    #2
  3. hoangvudb

    hoangvudb Thành viên hoạt động

    Bài viết:
    57
    Đã được thích:
    0
    Nơi ở:
    đà nẵng
    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
     
    Last edited: 25 Tháng hai 2006
    #3
  4. levanduyet

    levanduyet Welcome

    Bài viết:
    535
    Đã được thích:
    11
    Giới tính:
    Nam
    Nơi ở:
    HCM
    Sao tôi thử không được bạn ơi. Help...
    Thân,
    LVD
     
    #4
  5. HaiTam

    HaiTam Nguyễn Hải Tâm

    Bài viết:
    1,944
    Đã được thích:
    324
    Giới tính:
    Nam
    Nơi ở:
    TP.HCM
    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;
     
    #5
  6. Tuanktcdcn

    Tuanktcdcn Lão già ham vui

    Bài viết:
    548
    Đã được thích:
    50
    Nơi ở:
    Hà Nội
    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.
     
    #6
  7. levanduyet

    levanduyet Welcome

    Bài viết:
    535
    Đã được thích:
    11
    Giới tính:
    Nam
    Nơi ở:
    HCM
    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
     
    #7
  8. HongViet

    HongViet Thành viên thân thiết

    Bài viết:
    286
    Đã được thích:
    10
    Nơi ở:
    Đà 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!
     
    #8
  9. levanduyet

    levanduyet Welcome

    Bài viết:
    535
    Đã được thích:
    11
    Giới tính:
    Nam
    Nơi ở:
    HCM
    Cám ơn các bạn

     
    #9
  10. hai2hai

    hai2hai VNUNI Makes a difference

    Bài viết:
    2,012
    Đã được thích:
    128
    Nơi ở:
    Hà 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 à?
     
    #10
  11. levanduyet

    levanduyet Welcome

    Bài viết:
    535
    Đã được thích:
    11
    Giới tính:
    Nam
    Nơi ở:
    HCM
    Trời

    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
     
    #11
  12. workman

    workman Thành viên hoạt động

    Bài viết:
    372
    Đã được thích:
    0
    Nơi ở:
    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ổ.
     
    #12
  13. levanduyet

    levanduyet Welcome

    Bài viết:
    535
    Đã được thích:
    11
    Giới tính:
    Nam
    Nơi ở:
    HCM
    Welcome workman back to EFC. Anh đang "ADO for Dummies" và cảm thấy hay quá trời.
    LVD
     
    #13
  14. hai2hai

    hai2hai VNUNI Makes a difference

    Bài viết:
    2,012
    Đã được thích:
    128
    Nơi ở:
    Hà 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...
     
    Last edited: 15 Tháng sáu 2006
    #14
  15. workman

    workman Thành viên hoạt động

    Bài viết:
    372
    Đã được thích:
    0
    Nơi ở:
    Ho Chi Minh
    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.
     
    #15
  16. workman

    workman Thành viên hoạt động

    Bài viết:
    372
    Đã được thích:
    0
    Nơi ở:
    Ho Chi Minh
    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á.
     
    #16
  17. hai2hai

    hai2hai VNUNI Makes a difference

    Bài viết:
    2,012
    Đã được thích:
    128
    Nơi ở:
    Hà nội
    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.
     
    #17
  18. levanduyet

    levanduyet Welcome

    Bài viết:
    535
    Đã được thích:
    11
    Giới tính:
    Nam
    Nơi ở:
    HCM
    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
     
    #18

Chia sẻ trang này