Ist es möglich, die Ergebnisse von 2 SQL- SELECT
Anweisungen in einer Anweisung zusammenzufassen? Ich habe eine Datenbank mit Aufgaben, in der jeder Datensatz eine separate Aufgabe mit Fristen ist (und eine PALT
, die nur einige INT
Tage vom Start bis zum Stichtag Age
beträgt, ist auch eine INT
Anzahl von Tagen.)
Ich möchte eine Tabelle haben, in der jede Person in der Tabelle, die Anzahl der Aufgaben und die Anzahl der LATE
Aufgaben (falls vorhanden) aufgeführt ist.
Ich kann diese Daten leicht in separaten Tabellen abrufen, wie folgt:
SELECT ks, COUNT(*) AS '# Tasks' FROM Table GROUP BY ks
Rückgabe von Daten wie:
ks # Tasks
person1 7
person2 3
und dann habe ich:
SELECT ks, COUNT(*) AS '# Late' FROM Table WHERE Age > Palt GROUP BY ks
was zurückgibt:
ks # Late
person1 1
person2 1
Und ich will die Ergebnisse dieser beiden verbinden select
Aussagen (von der KS
)
Ich versuche, die Verwendung einer temporären Tabelle zu vermeiden, aber wenn dies der einzig praktikable Weg ist, würde ich gerne mehr über die Verwendung temporärer Tabellen auf diese Weise erfahren.
Ich habe auch versucht, eine Art von count()
Zeilen zu erstellen, die eine Bedingung erfüllen, aber ich konnte auch nicht herausfinden, wie das geht. Wenn es möglich ist, würde das auch funktionieren.
Nachtrag: Sorry, ich möchte , dass meine Ergebnisse Spalten haben für KS
, Tasks
undLate
KS # Tasks # Late
person1 7 1
person2 3 1
person3 2 0 (or null)
Außerdem möchte ich, dass eine Person auftaucht, auch wenn sie keine späten Aufgaben hat.
SUM(CASE WHEN Age > Palt THEN 1 ELSE 0 END) Late
funktioniert gut, danke für diese Antwort!
Zwei select-Anweisungen funktionieren ebenfalls, wobei das Verwenden LEFT JOIN
von a ebenfalls funktioniert, und ich verstehe jetzt, wie mehrere select
s auf diese Weise verbunden werden
Antworten:
quelle
Versuchen Sie so etwas:
quelle
Verwendung
UNION
:Oder
UNION ALL
wenn Sie Duplikate möchten:quelle
Wenn Alter und Palt Spalten in derselben Tabelle sind, können Sie alle Aufgaben zählen (*) und nur späte Aufgaben wie folgt summieren:
quelle
du kannst den ... benutzen
UNION ALL
Schlüsselwort dafür verwenden.Hier ist das MSDN-Dokument, um dies in T-SQL zu tun http://msdn.microsoft.com/en-us/library/ms180026.aspx
UNION ALL - kombiniert die Ergebnismenge
UNION- Führt so etwas wie eine Set Union aus und gibt keine doppelten Werte aus
Für den Unterschied mit einem Beispiel: http://sql-plsql.blogspot.in/2010/05/difference-between-union-union-all.html
quelle