2009-10-19 13 views
15

Ich habe 2 Abfragen in MS SQL, die eine Anzahl von Ergebnissen mithilfe der COUNT-Funktion zurückgeben.Subtraktion zwischen zwei SQL-Abfragen

Ich kann die erste Abfrage ausführen und das erste Ergebnis abrufen und dann die andere ausführen, um das andere Ergebnis zu erhalten, subtrahieren Sie sie und finden Sie die Ergebnisse; jedoch ist es eine Möglichkeit, alle drei Funktionen zu kombinieren und erhalten 1 Gesamtergebnis

Wie in: run sql1 laufen sql2 laufen SQL3 (sql1-sql2) ....

ich versuchte, sie mit xxxx als Funktion aber kein Glück.

+1

Erzähl uns ein wenig mehr über die Struktur der Tabellen und welche Daten du bekommen möchtest. Vielleicht können die Abfragen neu geschrieben werden, um mit nur einer Frage auszuwählen, was Sie wollen. –

Antwort

30

sollten Sie in der Lage sein, Unterabfragen für das verwenden:

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

Gerade getestet:

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

(1 row(s) affected) 
+0

Hallo, ich habe diese Methode versucht und es gibt mir FEHLER 1242 (21000) in Zeile 4: Unterabfrage gibt mehr als 1 Zeile zurück. Irgendwelche Vorschläge? –

+0

Ja. Stellen Sie sicher, dass Sie nur eine einzelne Zeile zurück erhalten, andernfalls können Sie sie nicht als Skalar verwenden. Die Fehlermeldung ist diesbezüglich ziemlich klar. Vielleicht sollten Sie überprüfen, was der Unterschied zwischen Ihrem Problem und dem in der Frage angegebenen ist. – Joey

+0

Ich bin die gleiche Frage lösen und das ist meine Abfrage: SELECT (SELECT COUNT (STADT) VON STATION) - (SELECT COUNT (STADT) VON STATION GROUP BY (STADT)) AS Unterschied –

1

einfach eine Inline-Funktion mit Ihrer Abfragelogik erstellen, und haben sie das Ergebnis zurück. Übergeben Sie Parameter nach Bedarf.

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

DANKE das löst es:) ... die einfachste Sache ... ahhh manchmal – andreas

+1

Danke! Es war so einfach, doch überall im Internet wird vorgeschlagen, extravagante SQL-Logik zu verwenden, um ein einfaches Minus zu erhalten. – 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

Ich weiß, dass dies eine alte Post, aber hier ist eine andere Lösung, die am besten auf meine Bedürfnisse (getestet auf Firebird) passen

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

((SELECT SUBSTRING_INDEX (SUBSTRING_INDEX (m, '/', 2), '/', - 1) VON ms WHERE ms.id = t.m_id) - (SELECT COUNT (id) VON t AS tr WHERE tr.m_id = t.m_id) ) AS übrig