【发布时间】:2021-02-28 04:25:12
【问题描述】:
我正在努力查询以从 3 个表中获取数据:
供应商:
supp_id int
name nvarchar(200)
phone nvarchar(10)
location nvarchar(50)
note nvarchar(MAX)
date date
供应商发票:
ID int
supp_id int
o_number nvarchar(50)
price decimal(18, 2)
note nvarchar(MAX)
date date
image image
suppliers_payments:
ID int
supp_id int
value decimal(18, 2)
method nvarchar(30)
note nvarchar(MAX)
date date
我想要得到的是这些信息:
suppliers.supp_id,suppliers.name,suppliers.phone,(sum(suppliers_invoices.price),
(sum(suppliers_payments.value), ((sum(suppliers_invoices.price) - (sum(suppliers_payments.value))
group by suppliers.supp_id.
我想获取每个供应商发票的价格总和和支付的价值总和。
我现在得到的是错误的数据,因为我认为价格乘以其他表格的行数。
这是我尝试过的:
SELECT dbo.suppliers.supp_id, dbo.suppliers.name, dbo.suppliers.phone,
SUM(dbo.suppliers_invoices.price) AS Expr1, SUM(dbo.suppliers_payments.value) AS Expr2
FROM dbo.suppliers INNER JOIN dbo.suppliers_invoices ON dbo.suppliers.supp_id =
dbo.suppliers_invoices.supp_id INNER JOIN dbo.suppliers_payments ON dbo.suppliers.supp_id =
dbo.suppliers_payments.supp_id GROUP BY dbo.suppliers.supp_id, dbo.suppliers.name,dbo.suppliers.phone
这是我正在测试的一些数据:
供应商:
supp_id name phone location note date
1 test 0543642256 NULL NULL 2020-11-17
2 test2 0543642211 NULL NULL 2020-11-17
供应商发票:
ID supp_id o_number price note date image
1 1 123 5000.00 NULL 2020-11-17 NULL
2 1 1235 3000.00 NULL 2020-11-17 NULL
3 2 55 2000.00 NULL 2020-11-17 NULL
suppliers_payments:
ID supp_id value method note date
1 1 2000.00 cash NULL 2020-11-17
2 1 2000.00 visa NULL 2020-11-17
我想得到的是:
supp_id name phone price value remain
1 test 0543642256 8000 4000 4000
2 test2 0543642211 2000 0 2000
谢谢。
【问题讨论】:
-
请提供一些DDL/DML形式的样本数据进行测试。
-
仅供参考,列的 3 部分命名到期 to be deprecated;给你的对象起别名并用它来限定你的列。对空格和换行符的一些良好使用也不会出错。
-
图像数据类型已被弃用 15 年 - 现在不要使用它!
-
@DaleK 我更新了问题,请看一下
-
@SMor,谢谢你的建议,我应该改用什么??
标签: sql sql-server sum aggregate-functions lateral-join