Announcement

Collapse
No announcement yet.

Spezielle SQL-Abfrage mit Summenbildung

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

  • Spezielle SQL-Abfrage mit Summenbildung

    Hallo Leute,

    Ich hab da eine SQL-Abfrage, die nicht genauso läuft wie ich es gerne hätte.

    Anbei mal der Code und unten beschreib ich dann was ich gerne hätte:

    [highlight=sql]DECLARE @ReportUID AS UNIQUEIDENTIFIER
    SET @ReportUID = '0F59B1C3-6815-4D0A-86A5-6F23C4BEA72D'

    SELECT DISTINCT RPCO_ProductPartner_Name AS [Produktpartner],
    (SELECT DISTINCT SUM(CASE
    WHEN RPCO_CommMethod_ShortName = 'BO'
    AND (RPCO_TRAN_CourtageBonusReceived) <> '0'
    THEN (RPCO_TRAN_CourtageBonusReceived)
    ELSE (RPCO_TRAN_CourtageReceived)
    END)
    FROM Z_ContactCategories WITH (NOLOCK)
    INNER JOIN Agents ON ZCCA_Contact_UID = AGEN_Contact_UID
    WHERE RPCO_AGEN_Agent_UID = AGEN_Agent_UID
    AND ZCCA_Deleted = 0
    AND ZCCA_Category_UID='710f0b75-cbbe-4fb0-bfb5-b261de17afed')
    AS [IPC]

    FROM RPT_TOC_TransactionDetails WITH (NOLOCK)
    INNER JOIN Agents_Commission WITH (NOLOCK) ON RPCO_AGEN_Agent_UID = AGST_Agent_UID
    WHERE (RPCO_Report_UID = @ReportUID)
    AND (AGST_End_Date IS NULL)
    AND (RPCO_CommissionFactor <> 0)
    AND (RPCO_AGEN_Commission_Value = '21')

    GROUP BY RPCO_ProductPartner_Name,
    RPCO_AGEN_Agent_UID

    HAVING (SELECT DISTINCT 1
    FROM Z_ContactCategories
    INNER JOIN Agents ON ZCCA_Contact_UID = AGEN_Contact_UID
    WHERE RPCO_AGEN_Agent_UID = AGEN_Agent_UID
    AND ZCCA_Deleted = 0
    AND ZCCA_Category_UID IN ('710f0b75-cbbe-4fb0-bfb5-b261de17afed')) IS NOT NULL

    ORDER BY RPCO_ProductPartner_Name, 'IPC'[/highlight]

    Und das ist das Ergebnis:


    Das IPC wird in der Subabfrage abgefragt. Die Summen kommen von der Haupttabelle, wo auch der Produktpartner hinterlegt ist.

    Ich möchte gerne die Summen Summieren. Leider tut es hier nicht. Das heißt, ich möchte dort wo jetzt "Capital Bank" steht, diese nur 1x stehen haben mit einer Endsumme und nicht x-mal.

    Ich weiß hier leider nicht mehr weiter. Bin schon seit Tagen daran, dieses Problem zu lösen. Hab auch schon sehr viel probiert. Leider hat es bis dato noch nicht funktioniert.

    Vielleicht könnte mir hier jemand helfen!

    LG, m-werk
    Zuletzt editiert von m-werk; 22.02.2011, 10:40.

  • #2
    Also mir wäre das jetzt glaube ich etwas zu anstrengend das ganze auseinander zu pfriemeln, zumal man weder die Domain noch die Tabellen kennt.
    Vielleicht das Problem erstmal aufs wesentlich reduzieren und dann ein etwas übersichtlicheres Kommando posten?

    Comment


    • #3
      a) wieso gruppierst wird nach RPCO_AGEN_Agent_UID?
      b) DISTINCT kann man sich sparen, das erledigt schon das GROUP BY
      c) Formatierung von SQL in Beiträgen

      Comment


      • #4
        Also folgendes.

        Ich habe 2 Tabellen. In der Tabelle 1 (Z_ContactCategories) habe ich die Categorien der User drinn stehen. z.B. IPC.

        In der 2. Tabelle (RPT_TOC_TransactionDetails) habe ich Transaktionen der User drinn stehen.

        So. Nun habe ich in der 2. Tabelle mehrere Werte drinn stehen. Zu jeder Transaktion habe ich auch den Produktpartner und eine User_UID und die Summe der einzellnen Transaktion.

        Es ist KEIN problem, alle Summen zu einem Produktpartner. Das würde ohne Probleme funktionieren.

        Aber ich möchte die Summen aufteilen auf die Kategorien, die in der Tabelle 1 stehen.

        Damit ich weiß welche Kategorie zu welchem User gehört, hab ich eine Zwischentabelle, die Agents.

        Ich verbinde jetzt also die Agents Tabelle mit der Kategorie Tabelle.
        (Sub-Select)[highlight=sql]FROM Z_ContactCategories WITH (NOLOCK)
        INNER JOIN Agents ON ZCCA_Contact_UID = AGEN_Contact_UID[/highlight]

        Dann muss ich noch die Tabelle 2 mit der Agents Tabelle verknüpfen.
        (Sub-Select)[highlight=sql]WHERE RPCO_AGEN_Agent_UID = AGEN_Agent_UID[/highlight]

        Weiters frage ich jetzt die Kategorie ab, so dass nur diese Werte erscheinen sollen: (Sub-Select)[highlight=sql]AND ZCCA_Category_UID='710f0b75-cbbe-4fb0-bfb5-b261de17afed'[/highlight]

        Und eben in der Subselect ist der Wurm begraben. Bzw. Gehört dieses ganze Select umgebaut. Nur weiß ich nicht wie.

        Im 1. Post beim Ergebniss wir die CapitalBank deshalb so oft angezeigt, Weil es mehrere Transaktionen gibt, wo der User der Kategorie IPC angehört. Wenn man beim Ergebnis die Alizee Bank AG ansieht, erscheint diese nur 1x, da es in der Tabelle 2 nur einen User gibt, der dieser Kategorie IPC angehört.

        Ich hoffe, dass ich mich verständlich ausgedrückt habe.

        Comment


        • #5
          Originally posted by ebis View Post
          a) wieso gruppierst wird nach RPCO_AGEN_Agent_UID?
          b) DISTINCT kann man sich sparen, das erledigt schon das GROUP BY
          c) Formatierung von SQL in Beiträgen
          Wenn ich RPCO_AGEN_Agent_UID nicht gruppiere, kommt folgende Fehlermeldung:
          "Die RPCO_AGEN_Agent_UID'-Spalte ist in der Auswahlliste ungültig, da sie nicht in einer Aggregatfunktion und nicht in der GROUP BY-Klausel enthalten ist.

          Ich hab im 1. Select das DISTINCT weggelassen, aber im SUB-Select MUSS ich es einbauen, sonst funktioniert es auch nicht.

          Comment


          • #6
            Hallo,

            da du in deinem HAVING keine Aggregatfunktion verwendest, gehört das wohl eher ins WHERE. Dann bräuchtest du auch nicht nach RPCO_AGEN_Agent_UID gruppieren.

            Die Verwendung von Aliasen für Tabellen würde die Lesbarkeit und Zugehörigkeit von Feldern um einiges erhöhen. Ohne Kenntnis der Tabellenstruktur kann sonst kein Mensch deine Subqueries aufdröseln und beurteilen, was wo falsch oder ungünstig ist.

            Gruß Falk
            Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

            Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

            Comment


            • #7
              Hallo,

              ich hab mal HAVING total ausgeklammert. Dies ist zur Zeit bei diesem Problem nicht notwendig.
              Ich hab in der Sub-Select aber trotzdem die RPCO_AGEN_Agent_UID drinn, daher kommt weiterhin diese Fehlermeldung, wenn ich diese Spalte aus dem Group by herausnehme. Und in der SUB-Select brauche ich dieses Feld!

              Comment

              Working...
              X