Jump to content

Arithmetischer Überlauffehler


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

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

Link zu diesem Kommentar

Hallo Sunny61 (obwohl ich nicht glaube das Du so heißt, aber egal),

 

diese Fehlermeldung spricht dagegen;

"Meldung 8115, Ebene 16, Status 2, Zeile 1
Arithmetischer Ü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:

Link zu diesem Kommentar

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]

Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...