Từ 1 tới 3 trên tổng số 3 kết quả

Đề tài: SELECT tổng hợp dữ liệu từ nhiều bảng trong SQL Sever?

  1. #1
    Ngày gia nhập
    10 2007
    Bài viết
    2

    Mặc định SELECT tổng hợp dữ liệu từ nhiều bảng trong SQL Sever?

    Chào mọi người!
    Mình đang gặp một vấn đề về truy vấn trong SQL.
    Mình có cơ sở dữ liệu như sau:

    1. Bảng tblProducts: lưu thông tin của sản phẩm gồm các trường
    ProductID : mã sản phẩm (Primary key)
    ProductName: tên sản phẩm
    UnitInstock: số lượng trong kho

    2. Bảng tblImports: lưu thông tin của một phiếu nhập gồm các trường:
    ImportID: mã phiếu nhập (Primary key)
    ImportDate: ngày nhập

    3. Bảng tlblImportDetails: lưu thông tin sản phẩm của phiếu nhập (phiếu nhập chi tiết) gồm có các trường
    ImportID: mã phiếu nhập (Foreign key)
    ProductID: mã sản pẩm (Foreign key)
    ImportQuantity: số lượng nhập

    4. Bảng tblExports: lưu thông tin của một phiếu xuất gồm có các trường:
    ExportID: mã phiếu xuất (Primary key)
    ExportDate: ngày xuất
    5. Bảng tblExportDetails lưu thông tin sản phẩm của một phiếu xuất (phiếu xuất chi tiết) gồm có các t rường
    ExportID: mã phiếu xuất (Foreign key)
    ProductID: mã sản phẩm (Foreign key)
    ExportQuantity: số lượng xuất

    Mình cần đưa ra một thống kê xuất nhập sản phẩm theo một khoảng thời gian, kết quả gồm các thông tin như sau:
    ProductID : Mã sản phẩm
    ProductName: Tên sản phẩm
    TotalImportQuanity: tổng số lượng nhập
    TotalExportQuantity: tổng số lượng xuất
    UnitInstock: Số lượng trong kho

    Ví dụ: Cần đưa ra một thống kê xuất nhập từ ngày 25/11/2008 đến ngày 26/11/2008?
    Mình đã làm như sau:
    + Đầu tiên: mình tạo một view (bảng ảo) để kết hợp thông tin của các bảng ở trên.
    Đây là view :vwImportExports:

    CREATE VIEW vwImportExports:
    AS
    SELECT dbo.tblProducts.ProductID, dbo.tblProducts.ProductName, dbo.tblImportDetails.ImportQuantity, dbo.tblExportDetails.ExportQuantity,
    dbo.tblImports.ImportDate, dbo.tblExports.ExportDate, dbo.tblProducts.UnitInstock
    FROM dbo.tblExports FULL OUTER JOIN
    dbo.tblProducts FULL OUTER JOIN
    dbo.tblImportDetails ON dbo.tblProducts.ProductID = dbo.tblImportDetails.ProductID FULL OUTER JOIN
    dbo.tblImports ON dbo.tblImportDetails.ImportID = dbo.tblImports.ImportID FULL OUTER JOIN
    dbo.tblExportDetails ON dbo.tblProducts.ProductID = dbo.tblExportDetails.ProductID ON dbo.tblExports.ExportID = dbo.tblExportDetails.ExportID

    Sau đó, mình thực hiện kết quả bằng một truy vấn như sau:

    SELECT DISTINCT(ProductID), SUM(ExportQuantity) AS [ExportQuantity], SUM(ImportQuantity)AS [ImportQuantity] FROM
    vwImportExports
    WHERE ImportDate BETWEEN '25/11/2008' AND '26/11/2008'
    OR ExportDate BETWEEN '25/11/2008' AND '26/11/2008'
    GROUP BY ProductID

    Tuy nhiên, kết quả không cho ra như mong muốn. Mình dùng toán tử OR sẽ cho ra điều kiện hoặc ExportDate nằm trong khoảng này hoặc ImportDate nằm trong khoảng kia, nếu dùng AND thì cũng không cho ra được kết quả.
    Nếu giả sử: vào ngày 26/11/2008 : số lượng nhập 5 sản phẩm, không có sản phẩm xuất
    Còn vào ngày 24/11/2008: xuất 1 sản phẩm, không nhập sản phẩm nào. Kết quả sẽ cho như sau:
    ProductID : 11 (chẳng hạn)
    ProductName: abc
    TotalImportQuanity: 5
    TotalExportQuantity: 1
    UnitInstock: 10 (chẳng hạn)

    Số lượng nhập 5 đúng còn số lượng xuất thì không đúng (từ ngày 25/11/2008 – 26/11/2008 không xuất một sản phẩm nào).
    Các bạn có thể giúp mình vấn đề trên?

    Cảm ơn mọi người!


    Bạn lưu ý: Không Post vào các Box hướng dẫn
    Đã được chỉnh sửa lần cuối bởi zkday2686 : 26-11-2008 lúc 06:24 PM.

  2. #2
    Ngày gia nhập
    09 2007
    Bài viết
    724

    - zkday có một thắc mắc là thằng nhập và xuất nó có liên hệ anh em gì với nhau trong cái vụ án này??? Trong khi câu hỏi của bạn là:

    Cần đưa ra một thống kê xuất nhập từ ngày 25/11/2008 đến ngày 26/11/2008?

    bạn lại mang câu select là :
    Code:
    WHERE ImportDate BETWEEN '25/11/2008' AND '26/11/2008'
    And ExportDate BETWEEN '25/11/2008' AND '26/11/2008'
    Sao lại And được trong trường hợp này??? Nếu and thì ngày đó bắt buộc phải có nhập và xuất à??? Còn chỉ nhập không và xuất không thì nó không ra

  3. #3
    Ngày gia nhập
    10 2007
    Bài viết
    2

    Ý mình muốn là đưa ra số lượng nhập và xuất của sản phẩm trong khoảng ngày '25/11/2008' và '26/11/2008' (trong khoảng thời gian này có bao nhiêu sản phẩm được nhập, xuất).
    Mình viết là:
    WHERE ImportDate BETWEEN '25/11/2008' AND '26/11/2008'
    OR ExportDate BETWEEN '25/11/2008' AND '26/11/2008'
    GROUP BY ProductID

Các đề tài tương tự

  1. Cách select nhiều row gộp thành 1 row?
    Gửi bởi 25mezs6ts09pao trong diễn đàn Thắc mắc Microsoft SQL Server & Microsoft Access
    Trả lời: 3
    Bài viết cuối: 05-11-2013, 08:54 AM
  2. làm sao để select 1 bảng có nhiều khóa ngoại ?
    Gửi bởi nltt7777 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 4
    Bài viết cuối: 07-07-2012, 07:28 PM
  3. Làm sao Select nhiều bảng với dữ liệu khác nhau?
    Gửi bởi philipdn trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 1
    Bài viết cuối: 18-10-2011, 05:12 PM
  4. Database Cách xoá nhiều dòng cùng 1 lúc trong SQL sever 2005 ?
    Gửi bởi huuhung trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 12
    Bài viết cuối: 16-04-2011, 10:18 AM
  5. Select dữ liệu trong nhiều ô textbox
    Gửi bởi kupin203 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 1
    Bài viết cuối: 08-12-2010, 08:10 AM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn