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的总和并减去它们的主要内容,如果未能解决你的问题,请参考以下文章

CASE 语句 SQL 中返回多列

SQL 选择并插入(如果不存在)

SQL两表模糊匹配查询

从另一个查询插入记录

我想要一个查询从 table2 中选择超过 4 个 AccountId 重复,在 table1 中具有不同的名称

SQL Server:查询以获取表 1 的 Col1 中的值的总和,以获取表 2 的 Col2 中的条件