SQL Server – Utilisation de SQL JOIN et UNION

J'ai 2 requêtes SQL réussies que j'essaie de combiner en 1. Une requête obtient le coût total de tous les produits, et l'autre requête obtient le revenu total de ces produits. Je voudrais avoir une troisième requête qui sortinge par profit (revenu – coût).

La requête 1 résume le coût total (dépensé) par identifiant de produit (id) à partir de 3 tables similaires en utilisant UNION ALL.

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 

La requête 2 résume le revenu total (rev) de 1 table

 SELECT id, SUM(rev) as rev_total FROM income GROUP BY id ORDER by rev_total DESC 

Voici ma tentative ratée de joindre les deux et de les sortinger (rev – dépenser)

 SELECT income.id, total_rev - 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_1 ON vendor_1.id = income.id order by result DESC 

Dans SELECT et JOIN vous utilisez le income.id place de rev.id

Pouvez-vous essayer la requête ci-dessous:

 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 

Vous devriez utiliser une autre sous-requête. essaye ça –

 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