Sql 连接4个不同条件的表

Sql 连接4个不同条件的表,sql,vb.net,ms-access,Sql,Vb.net,Ms Access,我使用vb.net 2012和msaccess2016作为数据库。我有四张桌子。物料主数据、结账、采购、出库。现在我想在下面格式化的datagridview中获得一段时间的结果。下面是专栏 项目名称(项目主控) 类别(项目主控) 单位(物料主数据) 数量总和(期末) 数量总和(采购) 数量总和(发行) 我已经用Item master和Closing创建了一个查询,它正在运行。但当我试图购买或发行时,没有数据。采购和出库表未获取任何数据 Dim sdate, edate As Date

我使用vb.net 2012和msaccess2016作为数据库。我有四张桌子。物料主数据、结账、采购、出库。现在我想在下面格式化的datagridview中获得一段时间的结果。下面是专栏

  • 项目名称(项目主控)
  • 类别(项目主控)
  • 单位(物料主数据)
  • 数量总和(期末)
  • 数量总和(采购)
  • 数量总和(发行)
我已经用Item master和Closing创建了一个查询,它正在运行。但当我试图购买或发行时,没有数据。采购和出库表未获取任何数据

Dim sdate, edate As Date
    sdate = dtsdate.Value
    edate = dtedate.Value

    Dim sqlSelect As String = "SELECT itemmaster.[Item Name], itemmaster.Category, itemmaster.Unit," _
                              & " Sum(Closing.Qty) AS Opening FROM itemmaster INNER JOIN Closing ON " _
                              & "itemmaster.[Item Name] = Closing.[Item Name] WHERE(((Closing.closeDate) >= #" & sdate & " # And (Closing.closeDate) <=#" & edate & " #))" _
                              & " GROUP BY itemmaster.[Item Name], itemmaster.Category, itemmaster.Unit"


    Try
        Dim con As New Odbc.OdbcConnection
        con.ConnectionString = "Dsn=sdbinventory;"
        Dim dt As New DataTable("user2")
        Using cmd = New Odbc.OdbcCommand(sqlSelect, con)
            con.Open()
            Dim da As New System.Data.Odbc.OdbcDataAdapter(sqlSelect, con)
            da.Fill(dt)
            con.Close()
        End Using
        dgtvreport.DataSource = dt
    Catch ex As Exception

        Throw
    End Try

@6月7日是的,我相信你的答案是最好的,我也知道,但我已经搜索了是否有其他选择,在这个过程中,你真的给了我关于不同类型查询的深入知识和差异。谢谢。

您验证过这两个表中是否有匹配的数据吗?是的,所有表都有一个公共字段作为项目名称。但是purchase and issue表没有数据。如果这些表没有数据,为什么您希望查询返回任何内容?请为这四个表和您尝试加入表的查询添加示例数据如果您需要每个表中按其自身参数筛选的记录,则需要4个查询,然后加入查询。
    PARAMETERS sdate DateTime, edate DateTime;
SELECT itemmaster.[Item Name], itemmaster.Category, itemmaster.Unit, Sum(Closing.Qty) AS SumOfQty1, Sum(Purchase.Qty) AS SumOfQty, Sum(Issue.Quantity) AS SumOfQuantity
FROM ((itemmaster INNER JOIN Closing ON itemmaster.[Item Name] = Closing.[Item Name]) INNER JOIN Issue ON itemmaster.[Item Name] = Issue.[Item Name]) INNER JOIN Purchase ON itemmaster.[Item Name] = Purchase.[Item Name]
WHERE (((Closing.closeDate)>=[sdate] And (Closing.closeDate)<=[edate]) AND ((Purchase.PDate)>=[sdate] And (Purchase.PDate)<=[edate]) AND ((Issue.Idate)>=[sdate] And (Issue.Idate)<=[edate]))
GROUP BY itemmaster.[Item Name], itemmaster.Category, itemmaster.Unit;
Item Name      Category     Unit     Opening     Purchased     Issued   Balance

  item1         Grocery      Kg        2           3               4       1

  item2         beverages    PCS       0           1               1       0

  Item3         vegetables   kg        2           0               0       2

  item4         consumable   Pkt       10          2               1       11