datagridview 2表输出错误

时间:2019-02-12 10:02:56

标签: vb.net ms-access

给出以下代码:

connection = New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=consignacion.mdb;")
SQLStr = "Select buyer,balance,
         (SELECT SUM(salesdb.total)
          From salesdb
          Where salesdb.buyer = buyerdb.buyer and
                buydate=@buydate and
                salesdb.total is not Null and
                salesdb.total<>@sales ) As [paid]
                From buyerdb where balance>@balance"
cmd = New OleDbCommand(SQLStr, connection)
cmd.Parameters.AddWithValue("@buydate", Form1.Lbldate2.Text)
cmd.Parameters.AddWithValue("@balance", 0)
cmd.Parameters.AddWithValue("@sales", 0)

在输出下方:

name    balance sales  
BANAL   1000      
BAYA    500   
RICKY   350   
GEN     0     
CASH    0     
BAGON   0     
LOREY   0     
TANIS   0       2250  
DARWIN  0       345  
GLEN    1000    4334  
LITO    0       505  
LIZA    0       460  
CESS    350     984  
LOUIE   0       280  
YOLLY   0       832  
GLENDA  0       170  
JOSE    1000    2240  

我想得到以下输出:

name    balance     sales    
BANAL   1000      
BAYA    500   
RICKY   350   
TANIS   0           2250  
DARWIN  0           345  
GLEN    1000        4334  
LITO    0           505  
LIZA    0           460  
CESS    350         984  
LOUIE   0           280  
YOLLY   0           832  
GLENDA  0           170  
JOSE    1000        2240  

我想显示所有余额大于0的买家
我想显示给定日期销售额/总数> 0的所有买方。 (有时买家没有给定日期的销售记录。
我不想同时显示余额和销售/总额为零的买家。

1 个答案:

答案 0 :(得分:1)

首先,在LEFT JOIN键的buyerdb bsalesdb s之间使用 buyer ,然后执行 {{1} } 根据 SUM() 命令在这些记录上。即使没有对应的GROUP BY行,它也会显示buyerdb行(左表):

salesdb

然后,将此请求用作嵌套请求,并进行过滤以仅获取所需的行:

SELECT b.buyer, b.balance, SUM(s.total) as total
FROM buyerdb b
LEFT JOIN salesdb s on (b.buyer = s.buyer AND s.buydate = @buydate)
GROUP BY buyer

Working SQL fiddle(应与Access配合使用)。