给出以下代码:
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的所有买方。 (有时买家没有给定日期的销售记录。
我不想同时显示余额和销售/总额为零的买家。
答案 0 :(得分:1)
首先,在LEFT JOIN
键的buyerdb b
和salesdb 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配合使用)。