2013-03-01 15 views
17

Attualmente ho due comandi di selezione come di seguito. Quello che mi piacerebbe fare è aggiungere i risultati insieme nella query SQL piuttosto che le variabili nel codice.Come aggiungere risultati di due comandi di selezione nella stessa query

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

È possibile avere entrambi nello stesso SQL e generare una somma di entrambi i risultati?

risposta

41

Sì. È possibile :D

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

Come sidenote, il nometabella projects-time deve essere delimitato per evitare errori di sintassi. I simboli delimitatore variano a seconda dell'RDBMS che si sta utilizzando.

+1

Bel lavoro. Grazie per quello. – Rhys

+0

prego ": D' –

+0

Qual è la s alla fine? È un errore di battitura? – Rhys

19

qualcosa di semplice come questo può essere fatto utilizzando sottoquery nella clausola select:

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

Per una semplice query come questo, una tale selezione secondaria è ragionevole.

In alcuni database, potrebbe essere necessario aggiungere from dual per la query da compilare.

Se si desidera attivare ciascuno individualmente:

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

Se si desidera sia e la somma, una sottoquery è a portata di mano:

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 
+0

Mi piace questa soluzione perché funziona per addizione e sottrazione – csharpsql

10

UNION ALL una volta, aggregare una volta:

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 
+0

non più ma tutto ':)' –

+2

@JW .: Essere cauto poiché non so * tutto * .. :) –

0

Ripetere per aggregazioni multiple ke SELECT SUM (Somma) AS TOTAL_AMOUNT DA ( SELEZIONA IMPORTO DA Table_1 UNION ALL SELEZIONA IMPORTO DA table_2 UNION ALL SELEZIONA ASSURED_SUM DA table_3 .... )

-1

Se si vuole fare un'operazione multipla utilizzare

select (sel1.s1+sel2+s2) 

(select sum(hours) s1 from resource) sel1 
join 
(select sum(hours) s2 from projects-time)sel2 
on sel1.s1=sel2.s2 
Problemi correlati