Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 查询结果不正确_C#_Sql_Ms Access_Join - Fatal编程技术网

C# 查询结果不正确

C# 查询结果不正确,c#,sql,ms-access,join,C#,Sql,Ms Access,Join,我想检索每个供应商的账单和付款总额,并将其显示在如下报告中: 我的数据库表关系是: 与正确的结果相比,我从查询中得到的结果非常大! 这是我的疑问: Dim strSQL As String strSQL = "SELECT c.sup_Name, c.sup_Place, SUM(a.bill_Total), SUM(d.pa_Value), c.sup_Id " & _ "FROM (suppliers c LEFT JOIN bills a on c.sup_Id

我想检索每个供应商的账单和付款总额,并将其显示在如下报告中:

我的数据库表关系是:

与正确的结果相比,我从查询中得到的结果非常大! 这是我的疑问:

Dim strSQL As String

strSQL = "SELECT c.sup_Name, c.sup_Place, SUM(a.bill_Total), SUM(d.pa_Value), c.sup_Id " & _
         "FROM (suppliers c LEFT JOIN bills a on c.sup_Id = a.bill_From) LEFT JOIN payments d ON c.sup_Id = d.pa_To " & _
         "WHERE (c.sup_Name LIKE '%" + txbSearch.Text + "%' OR c.sup_Place LIKE '%" + txbSearch.Text + "%') AND " & _
         "(a.bill_Date >= #" + txbFrom.Text + "# AND a.bill_Date <= #" + txbTo.Text + "#) AND " & _
         "(d.pa_EntryDate >= #" + txbFrom.Text + "# AND d.pa_EntryDate <= #" + txbTo.Text + "#)  " & _
         "GROUP BY c.sup_Id,c.sup_Name,c.sup_Place " & _
         "ORDER BY c.sup_Name asc"

OleDbCommand cmd = new OleDbCommand(strSQL, objConn);

OleDbDataReader dataReader = cmd.ExecuteReader();
我注意到的另一件事是: 如果特定供应商的付款表中有多行,则结果将不正确,但如果只有一笔付款,则结果将正确。。
账单表也是如此。

正确的结果是什么?您从查询中得到了什么结果?当你得到正确的结果时,你会使用什么方法?每个供应商都有付款和账单的总金额。我希望c.sup\u Id是唯一的,所以按c.sup\u名称和c\u sup\u位置分组是多余的。不需要按分组,你需要供应商重复使用网格,只需按子句确定订单,我会做内部连接,因为你不需要空白的账单和付款,如果你有1对多的问题,你可以添加distinct。我还看到你在名称和位置上使用相同的搜索字符串txbSearch。这会导致比你想要的更多的匹配,因为它是OR。正确的结果是什么?您从查询中得到了什么结果?当你得到正确的结果时,你会使用什么方法?每个供应商都有付款和账单的总金额。我希望c.sup\u Id是唯一的,所以按c.sup\u名称和c\u sup\u位置分组是多余的。不需要按分组,你需要供应商重复使用网格,只需按子句确定订单,我会做内部连接,因为你不需要空白的账单和付款,如果你有1对多的问题,你可以添加distinct。我还看到你在名称和位置上使用相同的搜索字符串txbSearch。这会导致比你想要的更多的匹配,因为它是OR。正确的结果是什么?您从查询中得到了什么结果?当你得到正确的结果时,你会使用什么方法?每个供应商都有付款和账单的总金额。我希望c.sup\u Id是唯一的,所以按c.sup\u名称和c\u sup\u位置分组是多余的。不需要按分组,你需要供应商重复使用网格,只需按子句确定订单,我会做内部连接,因为你不需要空白的账单和付款,如果你有1对多的问题,你可以添加distinct。我还看到你在名称和位置中使用相同的搜索字符串txbSearch。这会导致比你想要的更多的匹配,因为它是OR。