sql查询选择table1的总和和table2的总和并减去它们
Posted
技术标签:
【中文标题】sql查询选择table1的总和和table2的总和并减去它们【英文标题】:Sql query select sum of table1 and sum of table2 and subtract them 【发布时间】:2017-11-21 02:51:57 【问题描述】:Select idn, sum(tblppmp.total_item) as a_total
sum(tblRequest.Quantity) as b_total
sum(a_total- b_total) as itemsleft
FROM PPMP.dbo.tblppmp, ppmp.dbo.tblrequest
Group by idn
我的问题是如何将表 1 和表 2 中的单个项目相加,结果将被减去以获得答案。
喜欢这个
table1
id item
1 2
2 3
3 4
表2
id item
1 1
2 2
3 3
我想要的结果是这样的..
表 3
sum(table.item) - sum(table2.item)
table1.id 1 = 2
table2.id 1 = 1
so (2-1) = 1
id item_left
1 1
2 1
3 1
标识项
【问题讨论】:
不是答案,而是一些快速的 SQL 提示... 1) 记住阅读您的问题并相应地生成 SQL - 例如您的字段名称不正确(itemsleft 与 items_left)。 2) 使用声明的连接(例如 FROM PPMP.dbo.tblppmp inner ppmp.dbo.tblrequest on ...),因为这更容易阅读 + 维护 3) 间距和区分大小写的 SQL 对于可读性很重要(例如,所有 SQL 都应该是在 UPPERCASE 中,应该使用空格来保持 SQL 左对齐)等 4)使用表别名(idn 来自哪里?) 【参考方案1】:您不能使用sum(a_total- b_total)
。你必须使用sum(tblppmp.total_item) - sum(tblRequest.Quantity)
。
Select tblppmp.idn
, tblppmp.total_item as a_total
,tblRequest.Quantity as b_total
,tblppmp.total_item - tblRequest.Quantity as itemsleft
FROM dbo.tblppmp
INNER JOIN
(SELECT
tblrequest.idn
,sum(tblRequest.Quantity) AS Quantity
FROM tblrequest
WHERE tblrequest.dr_year = 2015
GROUP BY tblrequest.idn) tblrequest ON tblppmp.idn = tblrequest.idn
【讨论】:
先生,问题是总和(tblppmp.total_item)被乘以为什么? 因为a_total或b_total是别名,所以不能使用。 选择 tblppmp.idn, sum(tblppmp.total_item) as a_total , sum(tblRequest.Quantity) as b_total , sum(tblppmp.total_item) - sum(tblRequest.Quantity) as itemsleft FROM PPMP.dbo .tblppmp INNER JOIN ppmp.dbo.tblrequest ON tblppmp.idn = tblrequest.idn where tblrequest.dr_year = 2015 Group by tblppmp.idn 你有什么问题吗? 选择 tblppmp.idn, sum(tblppmp.total_item) as a_total , sum(tblRequest.Quantity) as b_total , sum(tblppmp.total_item) - sum(tblRequest.Quantity) as itemsleft FROM PPMP.dbo .tblppmp INNER JOIN ppmp.dbo.tblrequest ON tblppmp.idn = tblrequest.idn where tblrequest.dr_year = 2015 Group by tblppmp.idn '-------------使用此代码先生总项目乘以表请求先生中请求的项目数【参考方案2】:您可以先计算每个表的总和,然后再减去它们。
select idn,
a_total - ISNULL(r_total,0) as itemsleft
FROM
(
select idn, sum(p.total_item) as p_total
from PPMP.dbo.tblppmp p
group by idn
) p
LEFT JOIN
(
select idn, sum(r.Quantity) as r_total
from ppmp.dbo.tblrequest r
group by idn
) r on p.idn = r.idn
【讨论】:
非常感谢您的先生..我爱你..我现在明白了!以上是关于sql查询选择table1的总和和table2的总和并减去它们的主要内容,如果未能解决你的问题,请参考以下文章