2017-03-15 4 views
0

Ich möchte Messwerte zur Anzahl der Fälle in meiner Tabelle erhalten, in denen meine Daten verschiedenen Kriterien entsprechen. Derzeit habe ich Gruppen von 3+, die wir anhand bestimmter Kriterien untersuchen möchten. Für den Moment möchte ich die folgenden Zahlen erhalten: Die Aufschlüsselung der Datensätze in einer Gruppe von 3+, wobei CHESS = Weiß. Die Aufteilung der Datensätze in einer Gruppe von 3+, wo DATE like ‚% 16‘ Die Aufteilung der Datensätze in einer Gruppe von 3 + mit allen Kombinationen von Schach = weiß und DATE like ‚% 16‘Wie wählt man für alle Fälle innerhalb einer Gruppe?

+------------------------------------------------+ 
| GroupID | CHESS | DATE | 
| 1  | White | n16  | 
| 1  | Black | n16  | 
| 1  | Black | n03  | 
| 2  | White | n16  | 
| 2  | White | n10  | 
| 2  | White | n11  | 
| 3  | Black | n12  | 
| 3  | White | n14 | 
| 3  | Black | n16  | 
--------------------------------------------------- 

Schach Zahl von 1 = 2

Schach Zahl von 2 = 0

Schach Zahl von 3 = 1

: der Ausgang wäre so etwas wie sein

Datum Zählung von 1 = 2

Datum Zählung von 2 = 1

Datum Zählung von 3 = 0

Hüllen mit Schachzahl von 1 und Datum Zählung von 1 = 1

Hüllen mit Schach Zahl von 2 und Datumszahl von 2 = 0

Fällen mit Schach Zahl von 3 und Datumszahl von 3 = 0

Fällen mit Ch ess Zahl von 1 und Tag der Zählung 2 = 1

Hüllen mit Schachzahl von 1 und Tag der Zählung 3 = 0

Hüllen mit Schachzahl von 2 und Tag der Zählung 1 = 0

Hüllen mit Schachzahl von 2 und Tag der Zählung 3 = 0

Hüllen mit Schachzahl von 3 und Tag der Zählung 1 = 1

Hüllen mit Schachzahl von 3 und Tag der Zählung 2 = 0

Kann dies so erfolgen, dass Gruppen beliebiger Größe berücksichtigt werden, oder müsste es für die Gruppengröße spezifisch sein (würde die Abfrage beispielsweise nur in Dreiergruppen funktionieren)?

+0

@ user7002207 Sie haben einige Inkonsistenzen in Ihrer erwarteten Ausgabe. Es gibt 1 und 3 Weiße in der Gruppe 1 bzw. 2. Es gibt 1 Datum in der Gruppe 3. – KindaTechy

+0

Ich habe vielleicht falsch geschrieben, was beabsichtigt ist. Ultimateely, würde ich gerne wissen, wie viele meiner Gruppen enthalten 0 weiß, 1, weiß, 2 weiß usw., sowie wie viele Gruppen enthalten 1 weiß und 1 n16, 2 weiß und 1 n16, etc. – user7002207

Antwort

0

Man könnte es wie hier tun, group by cube und andere mit:

with groups as (select count(case when chess = 'White' then 1 end) cnt_white, 
         count(case when tdate = 'n16' then 1 end) cnt_n16 
        from t group by groupid), 
    numbers as (select level grp from dual connect by level <= 3) 
select white, n16, cnt 
    from (
    select n1.grp white, n2.grp n16, count(cnt_white) cnt, grouping_id(n1.grp, n2.grp) gid 
     from numbers n1 
     cross join numbers n2 
     left join groups on n1.grp = cnt_white and n2.grp = cnt_n16 
     group by cube(n1.grp, n2.grp) 
     having grouping_id(n1.grp, n2.grp) <> 3) 
    order by case when gid = 1 then 1 when gid = 2 then 2 when gid = 0 then 3 end, white, n16 

rextester demo

Ändern Ebene 3 in Unterabfrage numbers Anzahl der Gruppen zu ändern.

Verwandte Themen