Announcement

Collapse
No announcement yet.

Group By umgehen??

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

  • Group By umgehen??

    Hallo zusammen,
    ich habe in meiner SQL-Server-DB folgendes Select in meiner Abfrage:

    SELECT [Vertraege].[KG_ID], Count([Vertraege].[W_ID]) AS [Anzahl von W_ID],
    [Vertraege].[Matchcode],
    Sum([Vertragssumme].[Vertragssumme]) AS Gesamtsumme,
    [Vertraege].[SL],
    [Vertraege].[PG_ID],
    [Branche].[Branche]

    und ein Group By in welches nur <b>[Vertraege].[KG_ID]</b> eingetragen ist.
    Jetzt bekomm ich natürlich ständig Fehlermeldungen da <b>Matchcode, SL, PG_ID und Branche</b> nicht Teil der Agregat-Funktion sind.
    Jetzt hab ich irgendwo gelesen, das man dieses Problem über ein sogenanntes <b>VIEW</b> lösen kann.

    Wie müsste dieses View aussehen? Kann mir da wer bei helfen?

    Danke schon mal....

    Andreas

  • #2
    Hallo Andreas,<BR><BR>auch mit einer View wirst du nicht umhinkommen das SQL-Statement korrekt zu formulieren. Mit einem GROUP BY definierst du Gruppen von Datensätzen. Datensätze mit dem gleichen Wert dieser Definition fließen also in eine Gruppe, in deinem Fall wären das also alle Datensätze, die den gleichen Wert im Feld [Vertraege].[KG_ID] haben. Nun möchtest du aber auch noch z.B. das Feld [Vertraege].[Matchcode] anzeigen lassen. Da du nur definiert hast, dass das Feld [Vertraege].[KG_ID] gleich sein muss, kann das Feld [Vertraege].[Matchcode] also durchaus bei gleicher [Vertraege].[KG_ID] unterschiedlich sein. Ich mach mal ein Beispiel:<PRE>
    [Vertraege].[KG_ID], [Vertraege].[Matchcode]
    1,3
    1,5
    2,1
    </PRE>Jetzt wäre das Ergebnis nach deiner Gruppendefinition oben (GROUP BY [Vertraege].[KG_ID]) also die Gruppen 1 und 2. Aber was sollte er denn jetzt zu der Gruppe 1 für einen [Vertraege].[Matchcode] anzeigen? Da gibt es 3 und 5. Du musst also entweder diese Feld mit in die Gruppendefinition aufnehemen, dann hättest du in diesem Beispiel auch drei Gruppen oder du musst eine Funktion benutzen, die dann den kleinsten-, größten- oder Durchschnittswert für das Feld dieser Gruppe berechnet. Beispiel:<PRE>
    [Vertraege].[KG_ID], [Vertraege].[Matchcode]
    1,3
    1,5
    2,1
    select [Vertraege].[KG_ID], min([Vertraege].[Matchcode]) as MinMatchcode, max([Vertraege].[Matchcode]) as MaxMatchcode, avg([Vertraege].[Matchcode]) as AvgMatchcode
    from [Vertraege]
    group by [Vertraege].[KG_ID]
    Ergebnis:
    1, 3, 5, 4
    2, 1, 1, 1
    </PRE>Hoffentlich war meine Erklärung einigermaßen Verständlich...?! :-)<BR><BR>Viele Grüße Ola

    Comment

    Working...
    X