Announcement

Collapse
No announcement yet.

Count Befehl und Anderes, Anfängerfragen

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

  • Count Befehl und Anderes, Anfängerfragen

    Hallo,

    ich blutiger Anfänger in der SQL Scripterei und komme gerade mit dem selbst Anlernen nicht weiter.

    Ich stelle eine Datenbankabfrage die nur auf das Zählen auf Grund bestimmter Vorraussetzungen abzielt.

    Die Tabelle soll den Grunddatenbestand immer zählen das ist tab1 agebst, in der Tabelle tab2 agebtaet sind alle Untertätigkeiten aufgeführt.

    Diese Untertätigkeiten sollen zusätlich gezählt werden, wenn die Bedingung nicht NULL ist. Aus der Abfrage das Grunddatenbestandes und der Untertätigkeit ergibt sich ein Rest, der soll ebenfalls gezählt werden.

    Bei diesem Rest beginnen jetzt meine Probleme, der will nicht so wie ich will.

    Hier mein script und das Ergebnis:


    SELECT DISTINCT rest.aart, anr, Vorgang, Erledigt, rest.vorgang - rest.erledigt as Rest
    FROM (
    SELECT DISTINCT test.aart, test.anr, COUNT(test.adatum)as Vorgang, COUNT(test.datum2)as Erledigt
    FROM (
    SELECT DISTINCT tab1.aart, tab1.anr, tab1.adatum, tab2.datum2, tab1.astatus, tab2.datum1, tab2.taet_id, tab2.bearb
    FROM agebst tab1 LEFT OUTER JOIN agebtaet tab2
    ON tab1.anr = tab2.anr AND
    tab1.ajahr = tab2.ajahr AND
    tab1.aart = tab2.aart
    WHERE (tab1.astatus != 'A')
    AND ((tab1.aart = 'V01' OR tab1.aart = 'V07' OR tab1.aart = 'V09')
    AND (tab1.adatum >= '2009-02-01'AND tab1.adatum <= '2009-03-31' )
    AND (tab2.taet_id = '2020' OR tab2.datum2 IS NULL)
    AND (tab1.astatus != 'Z' OR (tab2.datum1 IS NOT NULL AND tab2.datum2 IS NOT NULL)))
    )AS test
    group by aart, anr) as Rest

    group by rest.aart, rest.anr, rest.vorgang, rest.erledigt


    Ergebnis
    Vorgang lfd. Nr. angelegt erledigt rest
    "V01 "; 55; 1; 0; 1
    "V01 "; 62; 1; 0; 1
    "V01 "; 73; 1; 1; 0
    "V07 "; 36; 1; 0; 1
    "V07 "; 87; 1; 0; 1
    "V09 "; 27; 1; 1; 0
    "V09 "; 35; 1; 1; 0

    Erklärung
    Theoretisch ist, die Tabelle genau das was ich will aber leider ist das Ergebnis nur eine Behelfskrücke, die erste SELECT Anweisung hat irgendwie nen Denkfehler. Ziel ist es die Gesamtheit aller gleichen Vorgänge anzeigen zu lassen, die lfd. Nr. ist uninteressant.

    Wenn ich die lfd. Nr. [anr] aus der Selectanweisung entfernen ergibt dies folgendes Ergebnis.

    "V01 ";1;0;1
    "V01 ";1;1;0
    "V07 ";1;0;1
    "V09 ";1;1;0

    es sollte aber sein
    V1 3;1;2
    V7 2;0;2
    V9 2;2;0


    Vielleicht kann mir ja Jemand nen entscheidenen Tip geben.

    Anm. Mir wurde von jemanden der sich mit SQL aber leider nicht mir Postgr auskennt gesagt, ich soll für die Countbefehle in dieser Anweisung:
    SELECT DISTINCT test.aart, test.anr, COUNT(test.adatum)as Vorgang, COUNT(test.datum2)as Erledigt

    Variablen vergeben und direkt die Resterechnung mit einbauen ohne die "Behelfskrücke" nur hab ich bisher keine Anleitung zur Variablennutzung gefunden.

    Vielen Dank für eure Hilfe
    Zuletzt editiert von mathiasla; 19.03.2009, 15:47.

  • #2
    Hmm, komplexes Beispiel aber ich denke, dein Problem liegt in der letzten group-phrase:
    group by rest.aart, rest.anr, rest.vorgang, rest.erledigt
    ich würde da rest.anr mal rausnehmen

    Comment

    Working...
    X