web-dev-qa-db-fra.com

Soustraction entre deux requêtes SQL

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

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. Cependant, existe-t-il un moyen de combiner les 3 fonctions et d'obtenir un résultat global?

Comme dans: exécuter SQL1 exécuter SQL2 exécuter SQL3 (sql1-sql2)? ....

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

17
andreas

Vous devriez pouvoir utiliser des sous-requêtes pour cela:

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

Je viens de le tester:

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

(1 row(s) affected)
34
Joey
SELECT (SELECT COUNT(*) FROM t1) - (SELECT COUNT(*) FROM t2)
21
Gary McGill

Je sais que ceci est un ancien post mais voici une autre solution qui correspond le mieux à mes besoins

SELECT c1-c2 from (select count(*) c1 from t1), (SELECT COUNT(*) c2 from t2);
3
Sven M.

Créez simplement une fonction en ligne avec votre logique de requête et demandez-lui de renvoyer le résultat. Transmettez les paramètres si nécessaire.

1
John Lechowicz
select @result = (select count(0) from table1) - (select count(0) from table2)
1
Justin Niessner
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
Philip Kelley
SELECT (count(*) from t1) - (count(*) from t2);

cela a fonctionné pour moi.

Aussi, s'il n'y a qu'une seule table, vous pouvez aussi faire:

SELECT (count(column1)) - count(column2)) from table; 
1
Csaxena

SELECT (sélectionnez COUNT (FIRSTNAME) FROM TRMDW.EMPLOYEE1) - (SELECT COUNT (NOM DU PRÉNOM)) DANS TRMDW.EMPLOYEE1) en tant que différence avec dual;

1
Ayesha Shaik

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

0
Faysal Ahmed Raju