2013-03-01 34 views
17

Tôi hiện có hai lệnh chọn như sau. Những gì tôi muốn làm là thêm các kết quả với nhau trong truy vấn SQL chứ không phải là các biến trong mã.Cách thêm kết quả của hai lệnh chọn trong cùng một truy vấn

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

Có thể có cả hai trong cùng một SQL và xuất tổng của cả hai kết quả?

Trả lời

41

Có. Có thể :D

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

Là một sidenote, tablename projects-time phải được phân định để tránh lỗi cú pháp. Ký hiệu dấu phân cách khác nhau trên RDBMS bạn đang sử dụng.

+1

Làm việc tốt. Cảm ơn vì điều đó. – Rhys

+0

bạn được chào đón ': D' –

+0

Cuối cùng là gì? Đó có phải là lỗi đánh máy không? – Rhys

19

Something đơn giản như thế này có thể được thực hiện bằng các truy vấn con trong mệnh đề select:

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

Đối với một truy vấn đơn giản như thế này, một subselect như vậy là hợp lý.

Trong một số cơ sở dữ liệu, bạn có thể phải thêm from dual để truy vấn biên dịch.

Nếu bạn muốn đầu ra mỗi cá nhân:

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

Nếu bạn muốn cả hai tổng, một subquery là tiện dụng:

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

Tôi thích giải pháp này bởi vì nó hoạt động để cộng và trừ – csharpsql

10

UNION ALL một lần, tổng hợp một lần:

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

không nhất nhưng tất cả ':)' –

+2

@JW .: Thận trọng vì tôi không biết * tất cả * .. :) –

0

Lặp lại cho nhiều tập hợp li ke CHỌN sum (AMOUNT) AS TOTAL_AMOUNT TỪ ( CHỌN SỐ TIỀN TỪ table_1 UNION ALL CHỌN SỐ TIỀN TỪ table_2 UNION ALL CHỌN ASSURED_SUM TỪ table_3 .... )

-1

Nếu bạn muốn chắc nhiều hoạt động sử dụng

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 
Các vấn đề liên quan