Ich erstelle eine Abfrage, die Gruppen Statusdaten des Mitglied Datensätze in einer Zeile in folgendem Format:Ärger mit Aggregaten und Gruppierung in SQL Server
MemberID P1StatusDate P2StatusDate P3StatusDate P4StatusDate
10 NULL NULL NULL 08/20/2017
In diesem speziellen Fall die ersten drei Zustände null sind, aber sie können bevölkert sein. Ich habe dies mit der folgenden Abfrage:
select memberid, max(case when statustype = 'Applicant' then cast(B.statusdate as date)end) as P1StatusDate
max(case when B.statustype = 'Pending' then cast(B.statusdate as date)end) as P2StatusDate
max(case when B.statustype = 'In Progess' then cast(sh.statusdate as date)end) as P3StatusDate
max(case when B.statustype = 'Approved' then cast(B.statusdate as date)end) as P4StatusDate
from Table A
inner join B
on A.statusdate = B.statusdate
group by memberid
Das Problem, das ich gefunden habe, ist, dass, wenn ein Mitglied hat 2 Genehmigten Datensätze mit unterschiedlichen Terminen nur eine als P4StatusDate auftaucht. Zum Beispiel:
MemberID Status StatusDate
10 Approved 08/19/2017
10 Approved 08/20/2017
Dies erscheint als:
MemberID P1StatusDate P2StatusDate P3StatusDate P4StatusDate
10 Null Null Null 08/20/2017
Die 2017.08.19 Datensatz wird weggelassen.
Wenn ich die Abfrage ändern, um das Statusdatum in der Gruppe zu enthalten, füllt es beide Datensätze für dieses Mitglied korrekt.
MemberID P1StatusDate P2StatusDate P3StatusDate P4StatusDate
10 Null Null Null 08/19/2017
10 Null Null Null 08/20/2017
Dies wird jedoch auch dazu führen, jede statusdate Aufzeichnung auf einer anderen Leitung für die anderen Mitglieder erscheinen:
MemberID P1StatusDate P2StatusDate P3StatusDate P4StatusDate
15 01/01/2017 NULL NULL NULL
15 03/01/2017 NULL NULL
15 NULL NULL 04/01/2017 NULL
15 NULL NULL NULL 05/01/2017
Gibt es eine Möglichkeit, die Gruppierung zu halten, so dass alle Statusdaten auf gruppiert eine Zeile, aber führt auch Aufzeichnungen, wo es mehrere Datensätze mit dem gleichen Status wie oben angegeben gibt?
Hinzufügen der Aggregat-Abfrage hat nicht geholfen. Bei Auswahl von Max (P4StatusDate) wurde immer noch eines der beiden Datumsangaben für dasselbe Element entfernt. Um dies zu lösen, musste ich ein zusätzliches Feld für die Gruppierung hinzufügen, das die beiden Datensätze weiter differenzierte. – jackstraw22
Ich habe die Abfrage bearbeitet. Dies kann für die Beispieldaten ausreichen, die Sie zur Verfügung gestellt haben. –
Das CTE funktioniert besser, aber die Ergebnisse sind noch ein wenig aus. Es gibt eine Zeile aller NULL, dann eine Zeile mit 2017-08-19 für P4, dann eine weitere NULL-Zeile und dann eine Zeile mit 2017-08-20. – jackstraw22