1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team-Mitglieder
    4. Trophäen
    5. Mitgliedersuche
  4. Tutorial Bereich
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Lexikon
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

SQL Group by sum()

    • Frage
  • MrTee
  • 10. April 2007 um 17:16
  • Unerledigt
  • MrTee
    3
    MrTee
    Mitglied
    Punkte
    45
    Beiträge
    6
    • 10. April 2007 um 17:16
    • #1

    Hallo

    Ich habe folgendes SQL Script welches mir Menge, Artikel, Artikelname usw. liefert. Wie schaffe ich es, dass mir jeder Artikel nur 1mal mit der entsprechend summierten Menge angezeigt wird?

    SQL
    SELECT 
            t1.ID,
            t1.STUELI,
            t2.position,
            menge = t1.mengestrukt,
            t2.vbme, 
            t2.artikel,
            myName = LEFT(t2.name,30),
            myVariante = ISNULL(t2.variante,'k.A.'),
            myAbmessung = ISNULL(t2.abmessung,'k.A.'),
            myZeichnung = ISNULL(t2.zeichnung,'k.A.'),
            t2.bedarfsort,
            myFremdartikel = ISNULL(art.fremdartikelvk,'k.A.')
            FROM udf_GetSubtree(@belegnummer) t1 
              INNER JOIN  stuelipos t2 ON t1.id = t2.id
              LEFT JOIN artikel art on t2.artikel = art.artikel
            where t2.bedarfsort = 4 or t2.bedarfsort = 6
            ORDER BY t2.artikel
    Alles anzeigen



    Hier mein Versuch- liefert aber den Fehler

    Die t1.id Spalte ist in der Auswahlliste ungültig, da sie nicht in einer Aggregatfunktion und nicht in der GROUP BY klausel enthalten ist.
    usw.
    usw.
    usw.

    SQL
    SELECT 
            t1.ID,
            t1.STUELI,
            t2.position,
            menge = t1.mengestrukt, [B][COLOR=darkred]sum(t1.mengestrukt) AS Summe,[/COLOR][/B]
            t2.vbme, 
            t2.artikel,
            myName = LEFT(t2.name,30),
            myVariante = ISNULL(t2.variante,'k.A.'),
            myAbmessung = ISNULL(t2.abmessung,'k.A.'),
            myZeichnung = ISNULL(t2.zeichnung,'k.A.'),
            t2.bedarfsort,
            myFremdartikel = ISNULL(art.fremdartikelvk,'k.A.')
            FROM udf_GetSubtree(@belegnummer) t1 
              INNER JOIN  stuelipos t2 ON t1.id = t2.id
              LEFT JOIN artikel art on t2.artikel = art.artikel
            where t2.bedarfsort = 4 or t2.bedarfsort = 6
            [COLOR=darkred][B]GROUP BY t2.artikel[/B][/COLOR]
            ORDER BY t2.artikel
    Alles anzeigen



    THX for HELP

    MrTee

  • Paulchen
    1
    Paulchen
    Gast
    • 10. April 2007 um 17:36
    • #2

    Warum tust du nicht einfach, was von dir verlangt wird? :)

    SQL
    SELECT 
            t1.ID,
            t1.STUELI,
            t2.position,
            sum(t1.mengestrukt) AS Summe,
            t2.vbme, 
            t2.artikel,
            myName = LEFT(t2.name,30),
            myVariante = ISNULL(t2.variante,'k.A.'),
            myAbmessung = ISNULL(t2.abmessung,'k.A.'),
            myZeichnung = ISNULL(t2.zeichnung,'k.A.'),
            t2.bedarfsort,
            myFremdartikel = ISNULL(art.fremdartikelvk,'k.A.')
            FROM udf_GetSubtree(@belegnummer) t1 
              INNER JOIN  stuelipos t2 ON t1.id = t2.id
              LEFT JOIN artikel art on t2.artikel = art.artikel
            where t2.bedarfsort = 4 or t2.bedarfsort = 6
            GROUP BY t2.artikel[b], t1.ID, t1.STUELI, t2.position, t2.vbme, myName, myVariante, myAbmessung, myZeichnung, t2.bedarfsort, myFremdartikel[/b]
            ORDER BY t2.artikel;
    Alles anzeigen

    Oder du schmeißt die Attribute, die sich innerhalb einer Gruppe unterscheiden einfach raus. Es können nur Attribute ausgegeben werden, die für die ganze Gruppe gleich sind.

  • MrTee
    3
    MrTee
    Mitglied
    Punkte
    45
    Beiträge
    6
    • 10. April 2007 um 18:03
    • #3

    thx a lot

    :thumb: Paulchen du bist a wahnsinn. Ich war schon am v....... und wohl auch ein wenig zu schreibfaul. ICh war der MEinung es reicht wenn ich die Spalte angebe nach der ich gruppieren will.

    So siehts richtig aus:

    SQL
    SELECT 
    t1.ID,
    t1.STUELI,
    t2.position,
    SUM(t1.mengestrukt) AS menge,
    t2.vbme, 
    t2.artikel,
    myName = LEFT(t2.name,30),
    myVariante = ISNULL(t2.variante,'k.A.'),
    myAbmessung = ISNULL(t2.abmessung,'k.A.'),
    myZeichnung = ISNULL(t2.zeichnung,'k.A.'),
    t2.bedarfsort,
    myFremdartikel = ISNULL(art.fremdartikelvk,'k.A.')
     
    FROM udf_GetSubtree(@belegnummer) t1 
    INNER JOIN stuelipos t2 ON t1.id = t2.id
    LEFT JOIN artikel art on t2.artikel = art.artikel
    where t2.bedarfsort = 4 or t2.bedarfsort = 6
    GROUP BY [B]t2.artikel, t1.ID, t1.STUELI, t2.position, t1.mengestrukt, t2.vbme, t2.artikel, t2.name, t2.variante, t2.abmessung, t2.zeichnung, t2.bedarfsort, art.fremdartikelvk[/B]
    ORDER BY t2.artikel
    Alles anzeigen



    Tja herzlichen dank nochmal.

    MrTee:) :thumb:

  • Maximilian Rupp 27. Dezember 2024 um 12:05

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!

Benutzerkonto erstellen Anmelden

Benutzer online in diesem Thema

  • 1 Besucher

Rechtliches

Impressum

Datenschutzerklärung