2009-10-19 92 views
15

我在MS SQL中有兩個查詢,它們使用COUNT函數返回多個結果。兩次sql查詢之間的減法

我可以運行第一個查詢並獲得第一個結果,然後運行另一個來獲得另一個結果,減去它們並查找結果;然而,有沒有辦法將所有3種功能,並獲得1整體結果

如:運行SQL3(SQL1,SQL2)運行SQL1運行SQL2 ....

我想他們XXXX的功能但沒有運氣。

+1

告訴我們更多關於表格結構和你想獲得什麼數據的信息。也許查詢可以重新編寫,只選擇一個quesry來選擇你想要的。 – 2009-10-19 14:44:05

回答

30

您應該能夠使用子查詢爲:

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

只是測試它:

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

(1 row(s) affected) 
+0

嗨,我試過這種方法,並且它在第4行給我錯誤1242(21000):子查詢返回多於1行。有什麼建議麼? – 2016-02-09 21:54:34

+0

是的。確保你只返回一行,否則你不能用它作爲標量。這方面的錯誤信息相當明確。也許你應該檢查你的問題和問題中提到的問題之間的區別。 – Joey 2016-02-09 22:03:34

+0

我正在解決同樣的問題,這是我的查詢:選擇 (從車站選擇計數(城市)) - (從車站組選擇城市)作爲區別 – 2016-02-09 22:23:17

1

只需創建您的查詢邏輯內聯函數,並將其返回結果。根據需要傳入參數。

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

感謝這解決了它:)...最簡單的事情...啊有時 – andreas 2009-10-19 14:54:14

+1

謝謝!它非常簡單,但是網絡上的所有人都建議使用奢侈的SQL邏輯來獲得它,只要簡單的減去就足夠了。 – Siddhartha 2015-04-22 17:53:19

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

我知道這是一個老的文章,但這裏是最爲合適我的需要另一種解決方案(上火鳥測試)

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

((SELECT SUBSTRING_INDEX(SUBSTRING_INDEX( (選擇COUNT(id)FROM t AS tr tr WHERE tr.m_id = t.m_id) )AS(m,'/',2),'/', - 1)FROM ms WHERE ms.id = t.m_id)剩餘