Frage

Ich habe eine Abfrage mit den folgenden Tabellen (nur die betroffenen Spalten zu zeigen, reduziert).

t1
code

t2
code, period, status

t3
period, desc

Nun, was ich habe, ist,

t 3 ist eine Tabelle der einzigartigen "Perioden".

t1 ist eine Tabelle von eindeutigen Codes.

t2 ist die Join-Tabelle verbindet beide zusammen, zusammen mit einem Status, aus Gründen der diesem Beispiel status = (A, B, C).

Was ich tue, ist ein Abfrageergebnis erstellen, die von „period“ gruppiert ist und die Anzahl des ‚Codes‘ in jedem Zustand.

Das ist leicht zu lösen, aber ich möchte dies erweitern will, ist nicht nur die Anzahl von ‚Code des in A, B und C, sondern auch eine Zählung der Codes zu haben, die nicht mit einem Punkt verbunden ist oder in anderen Worten, eine Zählung der Codes, die nicht in t2 für einen bestimmten Zeitraum sind.

So das Ergebnis ich suche ist

Period    A    B    C   (Codes from t1 not found in t2)
P1        10   5    2   3
P2        5    5    5   10
War es hilfreich?

Lösung

Sie können mit Quer join für alle Perioden eine Matrix aller Codes auszuwählen. Das erlaubt Ihnen, die Zeilen zu zählen, die nicht vorhanden ist:

select
    sum(case when t2.status is 'A' then 1 else 0 end) as ACount,
    sum(case when t2.status is 'B' then 1 else 0 end) as BCount,
    ...
    sum(case when t2.code is null then 1 else 0 end) as NotPresentCount
from       t1
cross join t3
left join  t2 
on         t2.code = t1.code and t2.period = t3.period
group by   t3.period
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top