Zum Beispiel, wenn Sie das folgende Beispiel in Betracht ziehen.
%Vor%Eine Möglichkeit, wie ich es sehen konnte, war, die ursprüngliche Zahl minus die ersten zwei Divisionen zu nehmen, und das Ergebnis wäre meine dritte Nummer. Wenn ich nun diese 3 Nummern nehme, bekomme ich meine Originalnummer.
%Vor%Gibt es dafür eine Formel in Oracle PL / SQL oder eine Funktion oder etwas, das implementiert werden könnte?
Vielen Dank im Voraus!
Diese Version benötigt auch Präzision als Parameter:
%Vor%Wenn Sie beispielsweise den Wert auf die Anzahl der Tage im aktuellen Monat aufteilen möchten, können Sie dies tun:
%Vor% Um den Wert zwischen den einzelnen Monaten, gewichtet nach der Anzahl der Tage in jedem Monat, aufzuteilen, können Sie dies stattdessen tun (ändern Sie die level <= 3
, um die Anzahl der Monate zu ändern, für die sie berechnet wird):
Verwenden Sie rationale Zahlen . Sie könnten die Zahlen als Brüche und nicht als einfache Werte speichern. Nur so kann sichergestellt werden, dass die Menge tatsächlich in 3 geteilt ist und sich zur ursprünglichen Zahl addiert. Sicher kannst du mit Rundungen und Resten etwas hacky machen, solange es dir egal ist, dass die Portionen nicht genau in 3 geteilt sind.
Der "Algorithmus" ist einfach das
100/3 + 100/3 + 100/3 == 300/3 == 100
Speichern Sie sowohl den Zähler als auch den Nenner in separaten Feldern und fügen Sie dann die Zähler hinzu. Sie können immer in Gleitkommawerte konvertieren, wenn Sie die Werte anzeigen.
Die Oracle-Dokumentation hat sogar ein schönes Beispiel dafür Implementieren Sie es:
%Vor%Hier ist eine parametrisierte SQL-Version
%Vor%Ausgabe:
%Vor%Wenn Sie die Eingabeparameter (p_number und p_buckets) editieren, verteilt das SQL p_number im Wesentlichen gleichmäßig auf die Anzahl der angeforderten Buckets (p_buckets).
Ich habe dieses Problem gestern gelöst, indem ich 2 von 3 Teilen von der Startnummer subtrahiert habe, z. 100 - 33,33 - 33,33 = 33,34 und das Ergebnis der Zusammenfassung ist immer noch 100.