1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen
  2. Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, Oracle, Sql-Server, Postgres, Access uvm
    Information ausblenden

Sum und group by - was mache ich falsch?

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von Kalli, 4 November 2010.

  1. Kalli

    Kalli Guest

    Hallo zusammen,

    erstmal vorab:
    Ich bin in Sachen SQl absoluter Anfänger und hab mir mein Wissen nach und nach selber beigebracht.

    Nun habe ich das problem, dass ich eine Abfrage aus 2 verschiedene Datenbanktabellen kombinieren möchte, wobei bei der Abfrage aus einer Tabelle eine Sum-Funktion vorhanden ist.
    Wie ich erfahren habe, muss ich deshlab bei der anderen Abgarge automatisch gruppieren, sonst funktioniert das wohl nicht.

    Genau da liegt mein Problem. Ich habe die Abfrage nun wiefolgt zusammen gebastelt:

    SELECT
    pj_name,
    cast(pj_nr as nvarchar(12)) as pj_nr,
    OIC_User.GetUserExchangeName(PORTFOLIO_LEITER) as
    PORTFOLIO_LEITER,
    OIC_User.GetUserExchangeName(PJ_LEITER) as PJ_LEITER,
    OIC_User.GetUserExchangeName(TEAM_CONTROLLING) as
    TEAM_CONTROLLING,
    STATUS,
    PROJEKT_TYP,
    SUM(di1+di2+di3+di4+di5) as SUMME_RATIO,
    MS0_DATUM_PLAN,
    MS0_DATUM_IST,
    case when MS1_DATUM_FC is not null then MS1_DATUM_FC
    else MS1_DATUM_PLAN end as MS1,
    MS1_DATUM_IST,
    case when MS2_DATUM_FC is not null then MS2_DATUM_FC
    else MS2_DATUM_PLAN end as MS2,
    MS2_DATUM_IST,
    case when MS3_DATUM_FC is not null then MS3_DATUM_FC
    else MS3_DATUM_PLAN end as MS3,
    MS3_DATUM_IST,
    case when MS4_DATUM_FC is not null then MS4_DATUM_FC
    else MS4_DATUM_PLAN end as MS4,
    MS4_DATUM_IST,
    case when MS5_DATUM_FC is not null then MS5_DATUM_FC
    else MS5_DATUM_PLAN end as MS5,
    MS5_DATUM_IST
    FROM t_oic_prodat, t_oic_prodat_ratio_ist
    WHERE
    projekt_typ = 'RS' or projekt_typ = 'RM' or projekt_typ = 'RT' or projekt_typ = 'RA'
    and (status is null or status in ('','läuft'))
    and t_oic_prodat_ratio_ist.Quartal =
    'Q ' +
    case when month(getdate()) between 1 and 3 then 'I'
    when month(getdate()) between 4 and 6 then 'II'
    when month(getdate()) between 7 and 9 then 'III'
    when month(getdate()) between 10 and 12 then 'IV'
    end
    + ' ' + year(getdate())
    GROUP BY pj_name, pj_nr, pj_leiter, Team_controlling, status, projekttyp, ms0_datum_plan, ms0_datum_ist
    ORDER BY projekt_typ


    Lasst euch nicht von den einzelen Feldabfragen und Where/Case-Klauseln stören, die sind soweit korrekt.
    Es geht mir darum, wie ich die Abfrage umformen muss, damit ich die Sum-Funktion nutzen kann.
    Mit der aktuellen Abfrage bekomme ich folgende Fehlermeldung:

    "Die 't_oic_prodat.PJ_NAME'-Spalte ist in der Auswahlliste ungültig, da sie nicht in einer Aggregatfunktion und nicht in der GROUP-BY-Klausel enthalten ist."

    Kann mir da jemand bei der korrekten Umformung der Abfrage weiterhelfen?

    Danke und Gruß
    Kai
     
  2. thomas_w

    thomas_w Datenbank-Guru

    AW: Sum und group by - was mache ich falsch?

    Aus der Entfernung betrachtet, gibt es da eventuell gleichlautende Spalten in beiden Tabellen. Da weiß MySQL nicht mehr, welche Spalte gemeint ist. Um dies wieder zu definieren sind dann ALIAS notwendig. Das geht so:

    an die Positionen der ? muss eine der Tabellen ALIAS hin. Das musst Du noch anpassen

    t.
    tr.


    Code:
    SELECT [COLOR=red][B]?[/B][/COLOR].pj_name,
           CAST([B][COLOR=#ff0000]?[/COLOR][/B].pj_nr AS nvarchar(12)) AS pj_nr,
           oic_user.getuserexchangename([B][COLOR=#ff0000]?[/COLOR][/B].portfolio_leiter) AS portfolio_leiter,
           oic_user.getuserexchangename([B][COLOR=#ff0000]?[/COLOR][/B].pj_leiter) AS pj_leiter,
           oic_user.getuserexchangename([B][COLOR=#ff0000]?[/COLOR][/B].team_controlling) AS [B][COLOR=#ff0000]?[/COLOR][/B].team_controlling,
           [B][COLOR=#ff0000]?[/COLOR][/B].status,
           projekt_typ,
           SUM(di1 + di2 + di3 + di4 + di5) AS summe_ratio,
           ms0_datum_plan,
           ms0_datum_ist,
           CASE
             WHEN ms1_datum_fc IS NOT NULL THEN
              ms1_datum_fc
             ELSE
              ms1_datum_plan
           END AS ms1,
           ms1_datum_ist,
           CASE
             WHEN ms2_datum_fc IS NOT NULL THEN
              ms2_datum_fc
             ELSE
              ms2_datum_plan
           END AS ms2,
           ms2_datum_ist,
           CASE
             WHEN ms3_datum_fc IS NOT NULL THEN
              ms3_datum_fc
             ELSE
              ms3_datum_plan
           END AS ms3,
           ms3_datum_ist,
           CASE
             WHEN ms4_datum_fc IS NOT NULL THEN
              ms4_datum_fc
             ELSE
              ms4_datum_plan
           END AS ms4,
           ms4_datum_ist,
           CASE
             WHEN ms5_datum_fc IS NOT NULL THEN
              ms5_datum_fc
             ELSE
              ms5_datum_plan
           END AS ms5,
           ms5_datum_ist
      FROM t_oic_prodat [B][COLOR=red]t[/COLOR][/B], 
              t_oic_prodat_ratio_ist [COLOR=red][B]tr[/B][/COLOR]
     WHERE projekt_typ = 'RS'
        OR projekt_typ = 'RM'
        OR projekt_typ = 'RT'
        OR projekt_typ = 'RA'
       AND (status IS NULL OR status IN ('', 'läuft'))
       AND t_oic_prodat_ratio_ist.quartal = 'Q ' + CASE
             WHEN MONTH(getdate()) BETWEEN 1 AND 3 THEN
              'I'
             WHEN MONTH(getdate()) BETWEEN 4 AND 6 THEN
              'II'
             WHEN MONTH(getdate()) BETWEEN 7 AND 9 THEN
              'III'
             WHEN MONTH(getdate()) BETWEEN 10 AND 12 THEN
              'IV'
           END + ' ' + YEAR(getdate())
     GROUP BY pj_name,
              pj_nr,
              pj_leiter,
              team_controlling,
              status,
              projekttyp,
              ms0_datum_plan,
              ms0_datum_ist
     ORDER BY projekt_typ
    
    Ich habe jetzt nur ein paar wenige Stelle mit ?. markiert. Vor jede Tabellenspalte muss der Alias eingefügt werden. Iich denke, Du hast das Prinzip schon verstanden.

    Grüße
    Thomas
     
  3. Kalli

    Kalli Guest

    AW: Sum und group by - was mache ich falsch?

    Danke für die Antwort.
    ich probiere es aus
     
Die Seite wird geladen...

Diese Seite empfehlen