2009-10-19 68 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)剩余