2009-10-19 43 views
15

Tôi có 2 truy vấn trong MS SQL trả về một số kết quả bằng hàm COUNT.Phép trừ giữa hai truy vấn sql

Tôi có thể chạy truy vấn đầu tiên và nhận kết quả đầu tiên và sau đó chạy kết quả khác để nhận kết quả khác, trừ chúng và tìm kết quả; Tuy nhiên có một cách để kết hợp tất cả 3 chức năng và nhận được 1 kết quả toàn khóa

Như trong: chạy sql1 chạy sql2 chạy SQL3 (sql1-sql2) ....

tôi đã cố gắng chúng với xxxx là một hàm nhưng không may mắn.

+1

Hãy cho chúng tôi biết thêm một chút về cấu trúc của các bảng và dữ liệu bạn muốn nhận. Có lẽ các truy vấn có thể được viết lại để chọn những gì bạn muốn chỉ với một quesry. –

Trả lời

30

Bạn sẽ có thể sử dụng truy vấn con cho rằng:

SELECT 
    (SELECT COUNT(*) FROM ... WHERE ...) 
    - (SELECT COUNT(*) FROM ... WHERE ...) AS Difference 

Chỉ cần thử nghiệm nó:

Difference 
----------- 
45 

(1 row(s) affected) 
+0

Xin chào, tôi đã thử phương pháp này và nó cho tôi ERROR 1242 (21000) tại dòng 4: Truy vấn con trả về nhiều hơn 1 hàng. Bất kỳ đề xuất? –

+0

Có. Hãy chắc chắn rằng bạn chỉ nhận được một hàng duy nhất trở lại, nếu không bạn không thể sử dụng nó như một vô hướng. Thông báo lỗi khá rõ ràng về vấn đề đó. Có lẽ bạn nên kiểm tra xem sự khác biệt giữa vấn đề của bạn và vấn đề được nêu trong câu hỏi là gì. – Joey

+0

Tôi đang giải quyết cùng một câu hỏi và đây là truy vấn của tôi: CHỌN (CHỌN COUNT (THÀNH PHỐ) TỪ TRẠM) - (CHỌN COUNT (THÀNH PHỐ) TỪ TRẠM TẬP ĐOÀN THEO (CITY)) AS Sự khác biệt –

1

Chỉ cần tạo một hàm nội tuyến với logic truy vấn của bạn, và có nó trả về kết quả. Vượt qua các tham số nếu cần.

1
select @result = (select count(0) from table1) - (select count(0) from table2) 
18
SELECT (SELECT COUNT(*) FROM t1) - (SELECT COUNT(*) FROM t2) 
+1

THANKS điều này giải quyết nó:) ... điều đơn giản nhất ... ahhh đôi khi – andreas

+1

Cảm ơn! Nó rất đơn giản, nhưng tất cả mọi người trên web đều gợi ý làm logic SQL ngông cuồng để có được nó khi một phép trừ đơn giản đủ. – Siddhartha

1
SELECT 
    t1.HowManyInTable1 
    ,t2.HowManyInTable2 
    ,t1.HowManyInTable1 = t2.HowManyInTable2 Table1_minus_Table2 
from (select count(*) HowManyInTable1 from Table1) t1 
    cross join (select count(*) HowManyInTable2 from Table2) t2 
1

Tôi biết đây là một bài cũ nhưng đây là một giải pháp phù hợp nhất với nhu cầu của tôi (thử nghiệm trên Firebird)

SELECT c1-c2 from (select count(*) c1 from t1), (SELECT COUNT(*) c2 from t2); 
0

((CHỌN SUBSTRING_INDEX (SUBSTRING_INDEX (m, '/', 2), '/', - 1) TỪ m WHI M WHI ms.id = t.m_id) - (CHỌN COUNT (id) TỪ t H tr TRERE tr.m_id = t.m_id) ) AS còn lại

Các vấn đề liên quan