2009-10-19 53 views
15

Tengo 2 consultas en MS SQL que devuelven una cantidad de resultados usando la función COUNT.Resta entre dos consultas sql

Puedo ejecutar la primera consulta y obtener el primer resultado y luego ejecutar el otro para obtener el otro resultado, restarlo y encontrar los resultados; Sin embargo hay una manera de combinar las 3 funciones y obtener 1 resultado global

Como en:? corrida sql2 SQL1 corre corre SQL3 (SQL1-sql2) ....

los probé con xxxx como una función pero sin suerte.

+1

Cuéntanos un poco más sobre la estructura de las tablas y qué datos deseas obtener. Tal vez las consultas se puedan volver a escribir para seleccionar lo que desea con solo un cuestionario. –

Respuesta

30

Usted debe ser capaz de usar subconsultas para ello:

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

acabo de probar que:

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

(1 row(s) affected) 
+0

Hola, probé este método y me da ERROR 1242 (21000) en la línea 4: Subquery devuelve más de 1 fila. ¿Alguna sugerencia? –

+0

Sí. Asegúrate de que solo recuperas una fila, de lo contrario no puedes utilizarla como un escalar. El mensaje de error es bastante claro al respecto. Tal vez deberías verificar cuál es la diferencia entre tu problema y el que se menciona en la pregunta. – Joey

+0

Estoy resolviendo la misma pregunta y esta es mi consulta: SELECCIONAR (SELECCIONAR CUENTA (CIUDAD) DESDE LA ESTACIÓN) - (SELECCIONAR CUENTA (CIUDAD) DEL GRUPO DE LA ESTACIÓN POR (CIUDAD)) COMO Diferencia –

1

Hay que crear una función en línea con su lógica de consulta, y tienen que devolver el resultado. Pase los parámetros según sea necesario.

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

GRACIAS esto lo resuelve:) ... lo más simple ... ahhh a veces – andreas

+1

Gracias! Era tan simple, sin embargo, en toda la web, la gente sugiere hacer una lógica SQL extravagante para obtenerla cuando basta un simple signo menos. – 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

Sé que esto es una entrada antigua, pero aquí es otra solución que mejor se ajuste a mis necesidades (probado en pájaro de fuego)

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

((SELECT SUBSTRING_INDEX (SUBSTRING_INDEX (m, '/', 2), '/', - 1) FROM ms WHERE ms.id = t.m_id) - (SELECT COUNT (id) FROM t AS tr DONDE tr.m_id = t.m_id) ) AS restantes