Sql server SQL Server-使用SQL连接和联合
我有两个成功的SQL查询,我正试图将它们合并为一个。一个查询获取所有产品的总成本,另一个查询获取这些产品的总收入。我想要第三个按利润(收入-成本)排序的查询 查询1使用UNION ALL从3个类似的表中按产品id(id)汇总总成本(支出)Sql server SQL Server-使用SQL连接和联合,sql-server,join,union,Sql Server,Join,Union,我有两个成功的SQL查询,我正试图将它们合并为一个。一个查询获取所有产品的总成本,另一个查询获取这些产品的总收入。我想要第三个按利润(收入-成本)排序的查询 查询1使用UNION ALL从3个类似的表中按产品id(id)汇总总成本(支出) SELECT id, SUM(spend) as spend_total FROM ( SELECT id, spend FROM vendor_
SELECT id, SUM(spend) as spend_total
FROM (
SELECT id, spend
FROM vendor_1
UNION ALL
SELECT id, spend
FROM vendor_2
UNION ALL
SELECT id, spend
FROM vendor_3
) as SpendTotal
GROUP BY id ORDER BY spend_total DESC
查询2汇总了表1中的总收入(修订版)
SELECT id, SUM(rev) as rev_total
FROM income
GROUP BY id ORDER by rev_total DESC
以下是我将两者结合起来并按(rev-spend)排序的失败尝试
在
中选择并加入您使用的是income.id
而不是rev.id
你能试试下面的查询吗
SELECT id, result
FROM (
SELECT rev.id, rev.total_rev - vendor_4.total_spend AS result
FROM (
SELECT id, SUM(rev) AS total_rev
FROM income
GROUP BY id
) AS rev
JOIN (
SELECT id, SUM(spend) AS total_spend
FROM (
SELECT id, spend
FROM vendor_1
UNION ALL
SELECT id, spend
FROM vendor_2
UNION ALL
SELECT id, spend
FROM vendor_3
) AS SpendTotal
GROUP BY id
) AS vendor_4 ON vendor_4.id = rev.id
) R
ORDER BY result DESC
您应该再使用一个子查询。试试这个-
select T1.*,T2.*
FROM
(
SELECT id, SUM(spend) as spend_total
FROM (
SELECT id, spend
FROM vendor_1
UNION ALL
SELECT id, spend
FROM vendor_2
UNION ALL
SELECT id, spend
FROM vendor_3
) as SpendTotal
GROUP BY id
) as T1
JOIN
(
SELECT id, SUM(rev) as rev_total
FROM income
GROUP BY id
) as T2
ON T1.Id = T2.Id
结果怎么了?你能显示结果和预期结果吗?失败的尝试是什么意思?你有错误吗?你没有得到正确的结果吗?@SeanLange击败了你;)@Eli和SeanLange-抱歉,我不知道如何获取错误消息。我在PHP中使用这段代码,但没有显示任何结果。页面上的任何内容都不会出现在该行SQL代码之后,因此我假设出现了错误。有没有办法读取错误?太好了!!谢谢@Arulkumar非常感谢您的快速响应顺便问一下,从第二行到最后一行的R是什么?只是查询块的别名,它有助于使用按结果排序
select T1.*,T2.*
FROM
(
SELECT id, SUM(spend) as spend_total
FROM (
SELECT id, spend
FROM vendor_1
UNION ALL
SELECT id, spend
FROM vendor_2
UNION ALL
SELECT id, spend
FROM vendor_3
) as SpendTotal
GROUP BY id
) as T1
JOIN
(
SELECT id, SUM(rev) as rev_total
FROM income
GROUP BY id
) as T2
ON T1.Id = T2.Id