2009-10-19 12 views
15

J'ai 2 requêtes dans MS SQL qui renvoient un certain nombre de résultats en utilisant la fonction COUNT.Soustraction entre deux requêtes sql

Je peux exécuter la première requête et obtenir le premier résultat, puis exécuter l'autre pour obtenir l'autre résultat, les soustraire et trouver les résultats; est pourtant là une façon de combiner les 3 fonctions et obtenir 1 résultat global

Comme dans: run run sql1 sql2 exécuter SQL3 (sql1-sql2) ....

Je les ai essayé avec xxxx en fonction mais pas de chance.

+1

Dites-nous un peu plus sur la structure des tables et sur les données que vous voulez obtenir. Peut-être que les requêtes peuvent être réécrites pour sélectionner ce que vous voulez avec une seule question. –

Répondre

30

Vous devriez être en mesure d'utiliser les sous-requêtes pour que:

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

Juste testé:

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

(1 row(s) affected) 
+0

Salut, j'ai essayé cette méthode et il me donne ERREUR 1242 (21000) à la ligne 4: Sous-requête renvoie plus de 1 ligne. Aucune suggestion? –

+0

Oui. Assurez-vous de ne récupérer qu'une seule ligne, sinon vous ne pourrez pas l'utiliser comme scalaire. Le message d'erreur est assez clair à cet égard. Peut-être devriez-vous vérifier quelle est la différence entre votre problème et celui mentionné dans la question. – Joey

+0

Je suis en train de résoudre la même question et c'est ma requête: SELECT (SELECT COUNT (VILLE) DE STATION) - (SELECT COUNT (VILLE) DE STATION GROUP BY (VILLE)) AS Différence –

1

Il suffit de créer une fonction en ligne avec la logique de votre requête, et l'ont renvoie le résultat. Passer les paramètres au besoin.

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

MERCI cela résout:) ... la chose la plus simple ... ahhh parfois – andreas

+1

Merci! C'était tellement simple, mais partout sur le web, les gens suggèrent de faire une logique SQL extravagante pour l'obtenir quand un simple moins suffit. – 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

Je sais que c'est un ancien poste, mais voici une autre solution qui convient le mieux à mes besoins (testé sur firebird)

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

((SELECT SUBSTRING_INDEX (SUBSTRING_INDEX (m, '/', 2), '/', - 1) À partir de ms où ms.id = t.m_id) - (SELECT COUNT (id) FROM t TR où tr.m_id = t.m_id) ) AS restant

Questions connexes