sql - 使用聚合函数在 Select 查询中连接多个表

标签 sql sql-server sql-server-2008 join

我想加入这两个查询,我想从 PQuantity 中减去 SQuantity,从 PAmount 中减去 SAmount。我怎样才能通过一个查询来实现这一目标。

SELECT        
SUM(QtyShare) AS SQuantity, SUM(QtyShare * Rate) AS SAmount,CompanyId
FROM Sales
WHERE (UserId = 1)
GROUP BY CompanyId

SELECT  SUM(Quantity) AS PQuantity, SUM(Quantity * Rate) AS PAmount,CompanyId
FROM (SELECT   UserId, CompanyId, Quantity, Rate AS Rate
       FROM  Purchase
       UNION ALL
       SELECT UserId, CompanyId, Quantity, 0 AS Rate
       FROM   Bonus
       UNION ALL
       SELECT UserId, CompanyId, Quantity, Rate AS Rate
       FROM   RightShare) AS t
WHERE (UserId = 1) GROUP BY CompanyId

最佳答案

尝试:

SELECT CompanyId,
       SUM(PQuantity) PQuantity, 
       SUM(PQuantity * PRate) PAmount,
       SUM(SQuantity) SQuantity, 
       SUM(SQuantity * sRate) SAmount
       SUM(PQuantity) - SUM(SQuantity) TQuantity, 
       SUM(PQuantity * PRate) - SUM(SQuantity * sRate) TAmount
FROM 
(SELECT UserId, CompanyId, Quantity PQuantity, Rate PRate, 0 SQuantity, 0 SRate
 FROM  Purchase
 UNION ALL
 SELECT UserId, CompanyId, Quantity PQuantity, 0 PRate, 0 SQuantity, 0 SRate
 FROM   Bonus
 UNION ALL
 SELECT UserId, CompanyId, Quantity PQuantity, Rate PRate, 0 SQuantity, 0 SRate
 FROM   RightShare
 UNION ALL
 SELECT UserId, CompanyId, 0 PQuantity, 0 PRate, QtyShare SQuantity, Rate SRate
 FROM   Sales) sq
WHERE (UserId = 1) 
GROUP BY CompanyId

关于sql - 使用聚合函数在 Select 查询中连接多个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17341007/

相关文章:

sql - 如何对表格中的项目重新排序

SQL Server 2008 连接两个查询

SQL Server 2008 运行大型查询 - 内存不足

mysql - 在只有几行的表中索引字符串字段是否有意义

sql - 使用 RETURNING INTO 子句和 BULK COLLECT 时如何返回整行

sql - 将列标题转换为行数据 - sql

sql - T-SQL 递归;多重递归?

sql - 我们如何使用自动生成的记录插入号在 sql server 中添加列。如果在该表上定义了索引

SQL 单元测试存储过程

Mysql 查询 select * 并且还包括 case when