Announcement

Collapse
No announcement yet.

SQL-Agorithmus gesucht

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

  • SQL-Agorithmus gesucht

    Hallo Leute,

    ich habe eine Tabelle mit folgendem Spaltenaufbau:
    KONTONR, SOLLSATZ1, SOLLSATZ2, HABENSATZ1, HABENSATZ2, REFIHABEN, REFISOLL

    Die Tabelle besitzt 1021 Datensätze, wobei es effektiv ca. 515 Datensätze sind. Ein Konto kann maximal 2 mal vorkommen.
    Konto 1 beinhaltet KONTONR + REFIHABEN + evtl. HABENSATZ1 + evtl. HABENSATZ2.
    Konto 2 beinhaltet KONTONR + REFISOLL + evtl. SOLLSATZ1 + evtl. SOLLSATZ2.

    Wie kann ich per einer SQL-Abfrage nun aus dieser 1 Tabelle ein Abfrageergebnis erhalten, wo jedes Konto nur 1 mal vorkommt mit einer Kombination dieser beiden evtl. vorhandenen Datensätze.

    Grüße,
    Carsten

  • #2
    Hallo,

    die Kombination von SUM und GROUP BY könnte diese Aufgabe lösen. Das folgende Beispiel für den MS SQL Server verdeutlicht das Prinzip:
    <pre>
    use tempdb
    GO
    CREATE TABLE KONTO (
    RecID INTEGER NOT NULL IDENTITY PRIMARY KEY,
    KONTONR INTEGER NOT NULL,
    SOLLSATZ1 MONEY,
    SOLLSATZ2 MONEY)
    GO
    INSERT INTO KONTO (KONTONR,SOLLSATZ1,SOLLSATZ2) VALUES (1, 100, 2)
    INSERT INTO KONTO (KONTONR,SOLLSATZ1,SOLLSATZ2) VALUES (1, 111, 3)
    INSERT INTO KONTO (KONTONR,SOLLSATZ1,SOLLSATZ2) VALUES (2, 3, 3)
    INSERT INTO KONTO (KONTONR,SOLLSATZ1,SOLLSATZ2) VALUES (3, 4, 5)
    INSERT INTO KONTO (KONTONR,SOLLSATZ1,SOLLSATZ2) VALUES (2, 6, 7)
    GO
    </pre>
    Abfrage:
    <pre>
    SELECT KONTONR, SUM(SOLLSATZ1), SUM(SOLLSATZ2)
    FROM KONTO
    GROUP BY KONTONR
    </pre>
    Wenn der Zustand NULL in einigen Spalten vorkommen kann, muss auf die T-SQL-Funktion <b>ISNULL</b> zurückgegriffen werden, um diese Spalten als Wert 0 beim Zählen zu berücksichtigen. Die Syntax bzw. die verfügbaren Funktionen unterscheiden sich je nach verwendeter SQL-Datenbank

    Comment


    • #3
      Hallo Andreas,

      wollte dieses Problem per SQL mit einer Paradox-Datenbank lösen, um später bei einem Umstieg auf eine andere Datenbank dieses Statement nutzen zu können.

      Nochmal zur Verdeutlichung der Spaltenaufbau der vorhandenen Tabelle:
      KONTONR, SOLLSATZ1, SOLLSATZ2, HABENSATZ1, HABENSATZ2, REFIHABEN, REFISOLL
      Die Sätze stellen jeweils nur Zinssätze dar, kein Geld.

      Nachfolgend zur Verdeutlichung 3 Datensätze in der vorhandenen Tabelle und die gewünschten 2 Datensätze der noch zu erstellenden SQL-Query:
      <PRE>
      Vorhandene Tabelle:
      '1'; NULL ; NULL; '3,875'; NULL; '1,875'; NULL
      '1'; '0,00 ; NULL; NULL ; NULL; NULL ; '1,50'
      '2'; NULL; NULLv '6,75'; NULL; '4,75'; NULL

      Gewünschte SQL-Antwort:
      '1'; '0,00'; NULL; '3,875'; NULL; '1,875'; '1,50'
      '2'; NULL; NULLv '6,75'; NULL; '4,75'; NULL
      </PRE>

      Kann ich sowas über SQL lösen? Bin für Tips dankbar. Und was ist eine T-SQL-Funktion? Können Paradox bzw. Interbase/Firebird so etwas?

      Viele Grüsse,
      Carste

      Comment


      • #4
        Hallo,

        &gt;..Und was ist eine T-SQL-Funktion? ..

        Dahinter verbirgt sich <b>Transact-SQL</b> - eine Spracherweiterung von SQL des Microsoft SQL Servers.

        &gt;Können Paradox bzw. Interbase/Firebird so etwas?

        Im Fall vom InterBase könnte man eine eigene UDF-Funktion nutzen (bzw. selbst schreiben, wenn keine passende gefunden werden kann). Im Fall von Paradox (SQL-Simulation der BDE über LOCAL SQL) sieht es da schlecht aus

        Comment

        Working...
        X