Netpower 0 Geschrieben 2. Februar 2015 Melden Teilen Geschrieben 2. Februar 2015 Hallo Zusammen, als Neuling hier im Forum habe ich versucht mich irgendwie durchzuhangeln und bin zum o.g. Thema auch auf verschiedene Beiträge gestoßen. Leider kann ich mit keinem Beitrag eine Lösung herbeiführen. Ich hänge mal den Code an, der zum Fehler führt. USE [vdpstatistik] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER function [dbo].[JA - Ranking Gesamtumsatz Total](@pJahr int) returns @Report_Table table ( [Jahr] int, [Umsatz WV] bigint NULL, [Umsatz PP] bigint NULL, [Umsatz Roh] bigint NULL, [Umsatz gesamt] bigint NULL ) as begin with PA as ( select Jahr, HG, SG, UG, EG, sum(coalesce(Weiterverarbeitung, 0)) as [Weiterverarbeitung] from vdpproduktion.dbo.Produktion_und_Absatz_F1_F6 P where Jahr = @pJahr group by Jahr, HG, SG, UG, EG ), VP as ( select Jahr, HG, SG, UG, EG, sum(coalesce(Verrechnungspreis, 0)) as [Verrechnungspreis] from vdpproduktion.dbo.Verrechnungspreis V where Jahr = @pJahr group by Jahr, HG, SG, UG, EG ), WV as ( select PA.Jahr, sum([Weiterverarbeitung]) as [Weiterverarbeitung], coalesce(sum(VP.[Verrechnungspreis] * (PA.[Weiterverarbeitung])), 0) as [Umsatz WV] from PA join VP on PA.Jahr = VP.Jahr and PA.HG = VP.HG and PA.SG = VP.SG and PA.UG = VP.UG and PA.EG = VP.EG group by PA.Jahr ), PP as ( select Jahr, sum(Papier_und_Pappe) as [Umsatz PP], sum([Zellstoff] + [Holzschliff] + [Altpapierstoff]) as [Umsatz Roh] from vdpproduktion.dbo.Umsaetze U where Jahr = @pJahr group by Jahr ) insert @Report_Table select coalesce(WV.Jahr, PP.Jahr) as Jahr, coalesce(WV.[Umsatz WV],0), coalesce(PP.[Umsatz PP],0), coalesce(PP.[Umsatz Roh],0), coalesce(WV.[Umsatz WV],0) + coalesce(PP.[Umsatz Roh],0) + coalesce(PP.[Umsatz PP],0) as [Umsatz gesamt] from WV full join PP on PP.Jahr = WV.Jahr return end Habe die Ausgabefelder als "bigint" declariert, mehr geht meineswissens doch nicht, oder? Ich hoffe man kann diesen Code auch ohne weitere Erklärungen lesen. Wenn ich das richtig verstehe, geht es im Prinzip doch nur um die Größe des Ausgabefeldes. Es kann bei der Ausgabe bis hin zu 3 stelligen Millardenbeträgen kommen. Welche Größeneinheit kann man denn hier noch nehmen? Hat vielleicht jemand eine Idee, wie ich zu meinen Ergebnissen komme. Vielen Dank schon mal im Voraus Ralf Zitieren Link zu diesem Kommentar
Sunny61 806 Geschrieben 2. Februar 2015 Melden Teilen Geschrieben 2. Februar 2015 Was spricht gegen Money als Datentyp? Zitieren Link zu diesem Kommentar
Netpower 0 Geschrieben 2. Februar 2015 Autor Melden Teilen Geschrieben 2. Februar 2015 Hallo Sunny61 (obwohl ich nicht glaube das Du so heißt, aber egal), diese Fehlermeldung spricht dagegen; "Meldung 8115, Ebene 16, Status 2, Zeile 1Arithmetischer Überlauffehler beim Konvertieren von expression in den int-Datentyp.Die Anweisung wurde beendet." Sie erscheint nämlich bei Money genauso wie bei bigint oder oder oder. Ich verzweifel langsam daran, denn es kann doch nicht sein das es nirgendwo eine Zahl = 3 Mrd.-Stellen verarbeitet werden kann. :cry: Ich verstehe es nicht, vielleicht gibt es ja eventl. sonst noch einen Fehler im Code. Ich finde nichts. :rolleyes: Zitieren Link zu diesem Kommentar
zahni 554 Geschrieben 2. Februar 2015 Melden Teilen Geschrieben 2. Februar 2015 Aus der Ferne kann ich nur schreiben: Welchen Datentyp haben die Ausgangsspalten? coalesce() castet nicht automatisch den Datentyp. Zitieren Link zu diesem Kommentar
Netpower 0 Geschrieben 2. Februar 2015 Autor Melden Teilen Geschrieben 2. Februar 2015 Alle Felder haben den Datentyp int. Zitieren Link zu diesem Kommentar
zahni 554 Geschrieben 2. Februar 2015 Melden Teilen Geschrieben 2. Februar 2015 Wenn Die alle int haben: Wozu ist dann die Verwendung von coalesce() gut? Bei den Summierungen spielen Null-Werte eigentlich keine Rolle. Ansonsten würde ich mir jede Subquery mal einzeln vornehmen und durchtesten. Es kann auch gut sein, dass eine internen Summierungen gegen die Wand rennt, da die als "int" ausgeführt werden. "int" geht bis 2.147.483.647. Eventuell lassen die die Werte vorher nach bigint casten, Beispiel: sum(cast(Verrechnungspreis as bigint)) as [Verrechnungspreis] Zitieren Link zu diesem Kommentar
Netpower 0 Geschrieben 3. Februar 2015 Autor Melden Teilen Geschrieben 3. Februar 2015 Vielen, vielen Dank!! Das mit dem vorher nach bigint casten hat es gebracht. Es ist immer wieder toll wenn man das fehlende Wissen bei Euch Profis kompensieren kann. Vielen Dank, wieder etwas dazu gelernt. Oft sind es die kleinen Dinge, die einem das Leben unnötig schwer machen. ;-)) Zitieren Link zu diesem Kommentar
zahni 554 Geschrieben 3. Februar 2015 Melden Teilen Geschrieben 3. Februar 2015 Danke für die Rückmeldung. Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.