Sql server SQL Server-使用SQL连接和联合

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_

我有两个成功的SQL查询,我正试图将它们合并为一个。一个查询获取所有产品的总成本,另一个查询获取这些产品的总收入。我想要第三个按利润(收入-成本)排序的查询

查询1使用UNION ALL从3个类似的表中按产品id(id)汇总总成本(支出)

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