J'ai actuellement deux commandes de sélection comme ci-dessous. Ce que je voudrais faire, c'est additionner les résultats dans la requête SQL plutôt que les variables dans le code.
select sum(hours) from resource;
select sum(hours) from projects-time;
Est-il possible d'avoir les deux dans le même code SQL et de générer une somme des deux résultats?
Oui. C'est possible :D
SELECT SUM(totalHours) totalHours
FROM
(
select sum(hours) totalHours from resource
UNION ALL
select sum(hours) totalHours from projects-time
) s
En tant que note de bas de page, le nom de table projects-time
doit être délimité pour éviter les erreurs de syntaxe. Les symboles de délimiteur varient selon le SGBDR que vous utilisez.
Une solution simple comme celle-ci peut être réalisée à l'aide de sous-requêtes dans la clause select
:
select ((select sum(hours) from resource) +
(select sum(hours) from projects-time)
) as totalHours
Pour une requête aussi simple, une telle sous-sélection est raisonnable.
Dans certaines bases de données, vous devrez peut-être ajouter from dual
pour que la requête soit compilée.
Si vous souhaitez afficher chacun individuellement:
select (select sum(hours) from resource) as ResourceHours,
(select sum(hours) from projects-time) as ProjectHours
Si vous voulez les deux et la somme, une sous-requête est pratique:
select ResourceHours, ProjectHours, (ResourceHours+ProjecctHours) as TotalHours
from (select (select sum(hours) from resource) as ResourceHours,
(select sum(hours) from projects-time) as ProjectHours
) t
UNION ALL
une fois, agrégé une fois:
SELECT sum(hours) AS total_hours
FROM (
SELECT hours FROM resource
UNION ALL
SELECT hours FROM "projects-time" -- illegal name without quotes in most RDBMS
) x
Répétez l'opération pour plusieurs agrégations telles que SELECT sum (AMOUNT) AS TOTAL_AMOUNT FROM ( SELECT AMOUNT FROM table_1 UNION ALL SELECT AMOUNT FROM table_2 UNION ALL SELECT ASSURED_SUM DE table_3 ....)