it-swarm.com.de

So fügen Sie Ergebnisse von zwei Auswahlbefehlen in derselben Abfrage hinzu

Ich habe derzeit zwei Auswahlbefehle wie unten. Was ich möchte, ist das Hinzufügen der Ergebnisse in der SQL-Abfrage und nicht die Variablen im Code.

select sum(hours) from resource;
select sum(hours) from projects-time;

Ist es möglich, beide in derselben SQL zu haben und eine Summe beider Ergebnisse auszugeben?

24
Rhys

Ja. Es ist möglich, :D

SELECT  SUM(totalHours) totalHours
FROM
        ( 
            select sum(hours) totalHours from resource
            UNION ALL
            select sum(hours) totalHours from projects-time
        ) s

Als Randnotiz muss der Tabellenname projects-time getrennt werden, um Syntaxfehler zu vermeiden. Trennzeichen unterscheiden sich je nach verwendetem RDBMS.

51
John Woo

Etwas so einfaches kann mit Unterabfragen in der select-Klausel gemacht werden:

select ((select sum(hours) from resource) +
        (select sum(hours) from projects-time)
       ) as totalHours

Für eine solche einfache Abfrage ist eine solche Unterauswahl sinnvoll.

In einigen Datenbanken müssen Sie möglicherweise from dual hinzufügen, damit die Abfrage kompiliert werden kann.

Wenn Sie jedes einzeln ausgeben möchten:

select (select sum(hours) from resource) as ResourceHours,
       (select sum(hours) from projects-time) as ProjectHours

Wenn Sie sowohl als auch die Summe wünschen, ist eine Unterabfrage hilfreich:

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
25
Gordon Linoff

einmal UNION ALL, einmal aggregieren:

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
10

Wiederholen Sie diesen Vorgang für mehrere Aggregationen wie SELECT sum (AMOUNT) AS TOTAL_AMOUNT FROM ( SELECT AMOUNT FROM Tabelle_1 UNION ALL SELECT AMOUNT FROM Tabelle_2 UNION ALL SELECT ASSURED_SUM FROM Tabelle_3 ....)

0
Pratik Roy