[NEWSboard IBMi Forum]

Thema: SQL Tabelle

Hybrid View

  1. #1
    Registriert seit
    Feb 2001
    Beiträge
    20.755
    Nein, das ist nicht vergleichbar, da hier komplette Zeilen vervielfältigt werden. Was du brauchst ist der selective Count:

    count(case p1 when 101 then A3 else NULL)

    Der Count zählt die Anzahl Sätze, in denen A3 nicht NULL ist.
    Birgitta zählt unabhängig vom Inhalt.

    count(case p1 when 101 then 1 else NULL)

    käme auf das selbe heraus, da ich ja zählen will und keine Summe benötige. Aber das ist Geschmackssache.
    Dies ist übrigens eine ähnliche Vorgehensweise wie beim SQL-Server die Pivot-Funktion.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  2. #2
    Registriert seit
    Aug 2001
    Beiträge
    2.934
    Zitat Zitat von Fuerchau Beitrag anzeigen
    Nein, das ist nicht vergleichbar, da hier komplette Zeilen vervielfältigt werden. Was du brauchst ist der selective Count:

    count(case p1 when 101 then A3 else NULL)

    Der Count zählt die Anzahl Sätze, in denen A3 nicht NULL ist.
    Birgitta zählt unabhängig vom Inhalt.

    count(case p1 when 101 then 1 else NULL)

    käme auf das selbe heraus, da ich ja zählen will und keine Summe benötige. Aber das ist Geschmackssache.
    Dies ist übrigens eine ähnliche Vorgehensweise wie beim SQL-Server die Pivot-Funktion.
    Meine Antwort hat genau der Anforderung entsprochen!
    Der Casus-Knacksus ist, dass die Werte aufgrund derer die Spalten gebildet werden sollten
    a) nicht bekannt sind und sich
    b) ändern können.

    Deshalb habe ich mit die Row_Number() eine Dummy-Zuweisung gemacht, die Spalten aufgrund der Zuweisung gebildet und den Inhalt entsprechend abgezählt.
    Dass es, sofern die Werte bekannt sind bessere Lösungen gibt steht außer Frage.

    @Baldur: Wenn Du schon Beispiele zeigst sollte auch die Syntax korrekt sein. In beiden Case-Anweisungen fehlt das END!

    Außerdem ist ELSE NULL der Default bei nicht gefunden, d.h. die Angabe ist optional.

    Birgitta
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 5. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  3. #3
    Registriert seit
    Feb 2001
    Beiträge
    20.755
    @Birgitta
    Da bin ich anderer Meinung (Syntaxfehler außer Frage).
    Aus Performancegründen und der Anforderung heraus garantiert deine Methode keine Konstanz in der Spaltenfolge.
    Du kannst also nicht garantieren, ob P1Count = 3 auch immer dem Schlüssel 102 entspricht.
    Da die Spaltennamen aber nur konstant zugewiesen werden können, macht es eher Sinn den konstanten Wert zu zählen und in der Spalte X dann NULL auszuweisen.
    Außerdem vereinfacht es den SQL.

    Sum(Case When P1Count = 1 Then 1 Else 0 End) "Anzahl 100",
    Sum(Case When P1Count = 2 Then 1 Else 0 End) "Anzahl 101",
    Sum(Case When P1Count = 3 Then 1 Else 0 End) "Anzahl 102",
    Sum(Case When P1Count = 4 Then 1 Else 0 End) "Anzahl 103",

    vs:

    count(case p1 when 101 then 1 end) "Anzahl 101"

    Aber wie immer, es gibt viele Wege zur Lösung.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  4. #4
    Registriert seit
    Sep 2005
    Beiträge
    426
    Ich verwende Birgittas Lösung, da ich die Spaltennamen und Anzahl nicht kenne.
    Wir haben das Excel Tool von Meinikat im Einsatz.
    Damit gebe ich zunächst den Text (P2) aus der TB_P in die Spalte 3 im Ziel excel. Dabei drehe ich die Ausgabe, so das ich alle Werte in eine Zeile in verschiedene Spalten schreibe, anstatt alles in eine extra Zeile.
    Danach schreibe ich den P1 Wert darunter, ebenfals gedreht.
    Im letzten Export schreibe ich die frisch erzeugte View ab Spalte 1 darunter
    Dummerweise sind in TB_P nicht ca 30 Sätze sondern mittlerweile 168!
    Lt Fachabteilung wird das in den nächsten 2 Jahren auf ca 200 anwachsen. Soviel haben ich nun vorgesehen.
    Ich weis zwar nicht wer ein Excel mit 200 Spalten ansehen will, aber das ist ja auch nicht meine Baustelle.

    Vielen Dank für Eure Hilfe!
    Der ILEMax

  5. #5
    Registriert seit
    Feb 2001
    Beiträge
    20.755
    PS: Bei unserer BI-Lösung gehört sowas übrigens zum Standard (incl. Excelexport) und die Anzahl der Spalten ist dabei sogar dynamisch.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

Similar Threads

  1. Tabelle mit Benutzerprofilen
    By HerbertW in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 03-01-20, 14:14
  2. Rechenformeln aus Tabelle ?
    By loeweadolf in forum NEWSboard Programmierung
    Antworten: 5
    Letzter Beitrag: 20-01-14, 13:40
  3. Typ DATE in SQL-Tabelle
    By Melanie in forum IBM i Hauptforum
    Antworten: 5
    Letzter Beitrag: 13-02-03, 11:30
  4. EXCEL-Tabelle auf AS/400
    By Steven in forum IBM i Hauptforum
    Antworten: 12
    Letzter Beitrag: 25-10-02, 11:32
  5. JPEG in DB/2-Tabelle
    By chrisi in forum IBM i Hauptforum
    Antworten: 4
    Letzter Beitrag: 07-12-01, 14:39

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •