Announcement

Collapse
No announcement yet.

Hilfe für Abfrage

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Hilfe für Abfrage

    Hallo zusammen,
    ich habe folgende Herausforderung. In einer Tabelle habe ich unter anderem folgende Informationen: Datum und eine Spalte, in der Informationen von Anruftypen enthalten sind. Insgesamt gibt es hiervon 8 verschiedene Typen:
    • 1. Ausgehender Kategorie A Anruf (lirum larum) – erreicht – Dauer…
    • 1. Ausgehender Kategorie A Anruf (lirum larum) – nicht erreicht – Dauer…
    • 1. Ausgehender Kategorie B Anruf (lirum larum) – erreicht – Dauer…
    • 1. Ausgehender Kategorie B Anruf (lirum larum) – nicht erreicht – Dauer…
    • 1. Ausgehender Kategorie C Anruf (lirum larum) – erreicht – Dauer…
    • 1. Ausgehender Kategorie C Anruf (lirum larum) – nicht erreicht – Dauer…
    • 1. Ausgehender Kategorie D Anruf (lirum larum) – erreicht – Dauer…
    • 1. Ausgehender Kategorie D Anruf (lirum larum) – nicht erreicht – Dauer…
    In bold sind die jeweiligen Schlüsselinformationen, die eine Tätigkeit eindeutig kennzeichnen und somit gruppieren lassen.

    Ich würde gerne eine Abfrage erstellen, die folgendes Ergebnis abbildet:
    Tag Kategorie A – erreicht Kategorie A – nicht erreicht Kategorie B – erreicht Kategorie B – nicht erreicht Kategorie C – erreicht Kategorie C – nicht erreicht Kategorie D – erreicht Kategorie D – nicht erreicht
    2018-12-18 20 10 20 10 10 10 12 33
    2018-12-19 10 11 10 39 22 11 10 10
    2018-12-20 ..
    2018-12-21
    2018-12-22
    Es sollen immer die letzten 10 Tage abgebildet werden und den Output pro Tätigkeit zeigen...

    Geht so etwas? Wir benutzen HeidiSql...

    Besten Dank für eure Hilfe.

    LG Felix

  • #2
    Ja, das geht!
    Dabei spielt es keine Rolle, welches SQL Werkzeug Du verwendest sondern vor allem, welche Datenbank Du verwendest oder ob es Datenbank unabhängig sein soll.
    Die proprietären Mittel, eine Kreuztabelle zu erzeugen sind meist viel schneller und eleganter als "der Standardweg".

    Der Standardweg bei 8 Kategorien sieht ungefähr so aus:
    Code:
    select * from
         (select datum, count (*) as kategorie_a1 from mytable a1 where kategorie= "Kategorie a1") ta1
    join (select datum, count (*) as kategorie_a2 from mytable a2 where kategorie= "Kategorie a2") ta2 on ta1.datum = ta2.datum
    join (select datum, count (*) as kategorie_b1 from mytable b1 where kategorie= "Kategorie b1") tb1 on ta1.datum = tb1.datum
    ...
    join (select datum, count (*) as kategorie_d2 from mytable d2 where kategorie= "Kategorie d2") td2 on ta1.datum = td2.datum
    Die Joins muss man je nach Gegenbenheit (Model) outer machen. Das äußere Select * zeigt das volle Ergebnis, das ist zur Kontrolle nicht verkehrt, am Ende muss es natürlich noch aufsummiert werden.

    Wenn Du teure bzw. bessere RDBMS nimmst, gibt es extra Syntax dafür, suche nach Pivot, crosstable ,. .. Es geht mindestens bei Postgres, Oracle und MSSQL.
    Zuletzt editiert von defo2; 27.12.2018, 19:10.

    Comment


    • Felix_83
      Felix_83 commented
      Editing a comment
      Danke dir!

  • #3
    würde da ja noch jeweils ein group by ranhängen
    Christian

    Comment


    • #4
      Ja, würde ich genaugenommen auch so machen!

      Ich hoffe, das verwendete rdbms spuckt den entsprechenden Fehler aus!

      verbessertes Beispiel*:
      Code:
      select ta1.datum, sum(kategorie_a1), sum(kategorie_a2), ... sum(kategorie_d2) from
             (select datum, count (*) as kategorie_a1 from mytable a1 where kategorie= "Kategorie a1" group by datum ) ta1
        join (select datum, count (*) as kategorie_a2 from mytable a2 where kategorie= "Kategorie a2" group by datum ) ta2 on ta1.datum = ta2.datum
        join (select datum, count (*) as kategorie_b1 from mytable b1 where kategorie= "Kategorie b1" group by datum ) tb1 on ta1.datum = tb1.datum
        ...
        join (select datum, count (*) as kategorie_d2 from mytable d2 where kategorie= "Kategorie d2" group by datum ) td2 on ta1.datum = td2.datum
       group by ta1.datum
      * Das stellt noch keine allgemeine Lösung dar, da nicht bekannt ist, wie die verwendeten INNER JOIN mit den tatsächlichn vorhandenen Daten harmonieren.

      Comment

      Working...
      X