UPDATE GROUP BY SUM mehrere Spalten

TheBlackPitcher

Neuer Benutzer
Beiträge
2
Hallo Zusammen,
Code:
--Setze Schleifenstartwert
DECLARE
        @INPAKET nvarchar (80) = '1'
--Mach ein Paket
DECLARE
        @Paket nvarchar (20) = ('_PAK' +@INPAKET )
-- Ermittle und Update das Bruttogewicht der einzelnen Pakete

                WHILE (CAST(@INPAKET AS INT)) <= (CAST(@ANZAHLPAKETE AS INT))
                BEGIN
                    EXEC (
                        'UPDATE BELEG
SET ' + @Paket + 'GEWNETTO =
(SELECT SUM(Menge*Gewicht)
FROM BELEGP
WHERE Belegtyp = ''' + :Belegtyp + '''
AND Belegnummer = ''' + :Belegnummer + '''
AND Artikelnummer <> ''VERPACKUNG''
AND _INPAKETNR = ' + @INPAKET + ')
WHERE Belegtyp = ''' + :Belegtyp + '''
AND Belegnummer = ''' + :Belegnummer + ''''
                    )
-- Ermittle das Gesamtbruttogewicht des Belegs
DECLARE
        @GESAMTBRUTTO FLOAT = 0
DECLARE
                        @SQLString NVARCHAR (500),
                        @ParmDefinition NVARCHAR (500),
                        @GEWNETTO VARCHAR (30),
SET @SQLString = N'SELECT @GEWNETTOOUT = iif(
                                     ((ISNULL(' + @Paket + 'GEWBRUTTO,(ISNULL(' + @Paket + 'GEWNETTO,0))))) = 0,
                                        (ISNULL(' + @Paket + 'GEWNETTO,0)),
                                        (ISNULL(' + @Paket + 'GEWBRUTTO,(ISNULL(' + @Paket + 'GEWNETTO,0))))
                                 )
FROM BELEG WHERE Belegtyp = ''' + :Belegtyp + ''' AND Belegnummer = ''' + :Belegnummer + ''''
    SET @ParmDefinition = N'@GEWNETTOOUT varchar(30) OUTPUT' EXECUTE sp_executesql @SQLString,
    @ParmDefinition,
    @GEWNETTOOUT =@GEWNETTO OUTPUT --Ende
SET @GESAMTBRUTTO = @GESAMTBRUTTO + @GEWNETTO
SET @INPAKET = @INPAKET + 1
SET @Paket  = ('_PAK' +@INPAKET)
END
Das ist der Code wie er jetzt zur Zeit läuft.
Ich würde gerne nur einen Tabellen Zugriff haben.
Ich würde gerne das Gewicht, was sich aus Menge*Gewicht ergibt, gruppiert bei der Paketnummer, in dem Beleg, in der entsprechenden Spalte Updaten. Das wird momentan über eine Schleife gelöst.
Das würde ich aber gerne in einem einzigen Update befehlt haben.
 
Werbung:
Code:
UPDATE BELEG
SET PAKET + @Paketnummer + NETTOGEW = erg. COLUMN + @Paketnummer...
FROM
    (
        SELECT
            paketnummer,
            SUM (Gewicht * Menge)
        WHERE
            Belegtyp = : Belegtyp
        AND Belegnummer = : Belegnummer
        AND Artikelnummer <> 'VERPACKUNG'
        GROUP BY
            paketnummer
Das hier noch als Verständnis Beispiel.
Nur das es sich eben um 30 Paketspalten handelt.
 
Zurück
Oben