Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Mehrere Spalten Zählen

Dieses Thema im Forum "Oracle" wurde erstellt von felix85, 19 Mai 2021.

  1. felix85

    felix85 Benutzer

    Hallo liebe Forumsmitglieder,

    ich verzweifle an meiner SQL-Anpassung.
    Und zwar möchte ich mehrere einzelne Fälle Zählen, d.h.
    Mich interessiert wie viele Autos wir im Lager haben und
    aktuelle Aufträge.

    Meine Abfrage:
    Select count(*) AS Anzahl_Autos
    (
    Select carid
    from Cars
    where
    verk = 0
    group by carid
    ); // Somit erhalte ich die Anzahl Autos die noch nicht verkauft wurden.
    Select count(*) AS Anzahl_Auftraege
    (
    Select distinct orderid
    from Cars
    where
    land = 'DE'
    group by orderid
    ); // Distinct weil doppelte Aufträge möglich sind

    Ich möchte nun diese Abfragen in einer Abfrage abbilden.
    Bsp.:
    Anzahl_Autos | Anzahl_Auftraege | Mögliche weitere Zählungen
    25 | 8

    Habt ihr ein Lösungsansatz ?

    Ich danke euch jetzt schon im Voraus für eure Unterstützung
     
  2. akretschmer

    akretschmer Datenbank-Guru

    suchst Du soetwas?

    Code:
    edb=# create table auto (typ text, anzahl int, status text);
    CREATE TABLE
    edb=*# insert into auto values ('Trabbi',5,'Lager');
    INSERT 0 1
    edb=*# insert into auto values ('Trabbi',3,'Verkauft');
    INSERT 0 1
    edb=*# insert into auto values ('Mercedes',3,'Verkauft');
    INSERT 0 1
    edb=*# insert into auto values ('Opel',3,'Lager');
    INSERT 0 1
    edb=*# select sum(anzahl) filter (where status = 'Lager') as anzahl_lager, sum(anzahl) filter (where status = 'Verkauft') as anzahl_verkauft from auto ;
     anzahl_lager | anzahl_verkauft
    --------------+-----------------
                8 |               6
    (1 row)
    
    edb=*#
    
    Falls ich falsch liege: bitte Tabellendefinition, Beispieldaten und was rauskommen soll, damit das nachvollziehbar wird.
     
  3. felix85

    felix85 Benutzer

    Hi, vielen lieben Dank für deine schnelle Antwort .
    Leider kann ich dieses Prinzip an bestehender Tabelle nicht Anwenden.

    Tabellendefinition:
    carid, orderid, land, lagerort
    123, 732653, DE, 2
    456, 732768, NL, 1
    789, 735477, US, 1
    234, 732653, DE, 2
    567, 732758, NL, 2
    890, 735477, TK, 1

    Es interessiert mich,
    wie viele Autos habe wir im System,
    wie viele Bestellungen ACHTUNG, auch doppelte möglich,
    In einen bestimmten Land= "DE"und wieviele Lagerorte besitzen wir


    Kurz gesagt, es interessiert mich wie oft kommen die Daten in jeder Spalte vor.
    Nach dem prinzip, distinct carid, distinct orderid, distinct lagerort.
     
  4. akretschmer

    akretschmer Datenbank-Guru

    also so?

    Code:
    edb=*# select * from felix ;
     carid | orderid | land | lagerort
    -------+---------+------+----------
       123 |  732653 | DE   |        2
       456 |  732768 | NL   |        1
       789 |  735477 | US   |        1
       234 |  732653 | DE   |        2
       567 |  732758 | NL   |        2
       890 |  735477 | TK   |        1
    (6 rows)
    
    edb=*# select count(1) as anzahl, count(distinct orderid) as bestellungen, count(distinct lagerort) as lagerorte from felix where land = 'DE' ;
     anzahl | bestellungen | lagerorte
    --------+--------------+-----------
          2 |            1 |         1
    (1 row)
    
     
  5. felix85

    felix85 Benutzer

    JAEIN. Es interessiert mich. Wieviele Länder Kommen vor, nicht Auftragsbezogen heißt die Spalte muss einzel betrachtet werden.
    Bsp.: Selct count(*) (Select distinct lagerort AS Anzahl_Lagerorte from cars);
    Selct count(*) (Select distinct bestellungen AS Anzahl_bestellungen from cars where land = "DE");
    Selct count(*) (Select distinct carid AS Anzahl_Autos from cars);
    Ziel ist es oben gelistete Abfragen als eine Darzustellen.
     
  6. akretschmer

    akretschmer Datenbank-Guru

    dann spielen wir mal noch a bissl weiter ...

    Code:
    edb=*# select count(distinct land) as anz_laender, count(distinct lagerort) as anz_lagerorte, count(distinct orderid) bestellungen, count(distinct carid) as autos, count(distinct orderid) filter (where land = 'DE') as best_de, count(distinct orderid) filter (where land = 'US') as orders_amiland from felix ;
     anz_laender | anz_lagerorte | bestellungen | autos | best_de | orders_amiland
    -------------+---------------+--------------+-------+---------+----------------
               4 |             2 |            4 |     6 |       1 |              1
    (1 row)
    
    Deine textuelle Beschreibung ist wirr, ich bat Dich um Beispieldaten und was bei rauskommen soll.
     
  7. felix85

    felix85 Benutzer

    Genau das Funktioniert super im SQL Client aber in SAP wird es nicht ausgeführt, count(distinct spalte) = Problem,
    deswegen habe ich mir mit einen externen Zähler geholfen.
    Der SQL Command Editor führt dieser über die Transaktion DBACOCKPIT nicht aus.

    Vielen Dank für deinen Einsatz.
     
  8. felix85

    felix85 Benutzer

    Nochmal kurze Rückmeldung.
    Bekomme es nicht zum laufen. Muss die Abfragen leider einzeln Ausführen.
     
  9. akretschmer

    akretschmer Datenbank-Guru

    SAP hat meines Wissens nach eine eigene vergurkte Datenbankengine... frag den SAP-Support, wie Du das da lösen kannst.
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden