Ich habe ein Szenario, wo ich prozentualen Anteil von jedem Kindknoten durch Multiplizieren Knotenwert mit Knotengewicht finden muss, (zB NodeVal * (NodeWeight/100)), dann summiere diese berechneten Werte aller Kindknoten und füge sie zu ihrem Elternteil hinzu, jetzt hat dieses neu berechnete Elternteil auf einer Ebene auch sein Gewicht, welches mit seinem Wert und dann wir multipliziert wird Berechnet die Summe aller untergeordneten Knoten auf dieser Ebene und fügt sie der übergeordneten übergeordneten Ebene usw. hinzu.How to Multiple Node Gewicht mit seinem Wert dann compute Summe aller Kindknoten in Eltern Kind Hierarchie mit SQL Server 2008
Abfragen im Internet funktionieren gut, wenn wir einfach die Summe aller Kindknoten berechnen, aber in meinem Fall nicht hilfreich.
Ich verwende folgende Abfrage, aber es liefert kein genaues Ergebnis.
CREATE TABLE TEMP(
Id INT
,ParentNodeId INT
,Weight FLOAT
,Score FLOAT
);
INSERT INTO TEMP
VALUES (2, 1, 0, 0),
(3, 2, 100, 0),
(4, 2, 100, 0),
(5, 2, 100, 0),
(6, 3, 40, 100),
(7, 3, 30, 0),
(8, 3, 30, 100),
(9, 7, 10, 100),
(10, 7, 40, 100),
(11, 7, 50, 0),
(12, 11, 30, 100),
(13, 11, 70, 0),
(14, 13, 50, 100),
(15, 13, 50, 100);
WITH cte(Id, ParentNodeId, LEVEL, Struc, Weight, Score)
AS
(
SELECT t.Id, t.ParentNodeId, 0 AS LEVEL, CAST(':' + CAST(t.Id AS VARCHAR) + ':' AS VARCHAR(MAX)) AS Struc, t.Weight, t.Score
FROM TEMP t
WHERE t.ParentNodeId = 2
UNION ALL
SELECT t.Id, t.ParentNodeId, LEVEL + 1 AS LEVEL, CAST(e.Struc + CAST(t.Id AS VARCHAR) + ':' AS VARCHAR(MAX)) AS Struc, t.Weight, t.Score
FROM TEMP t
INNER JOIN cte e ON e.Id = t.ParentNodeId
)
select c1.Id, c1.ParentnodeId, c1.weight, c1.score,c1.struc,
SUM(c2.score * (c2.weight/100)) ProductCountIncludingChildren
from cte c1
left outer join cte c2 on c1.struc <> c2.struc and left(c2.struc, LEN(c1.struc)) = c1.struc
group by c1.Id, c1.ParentnodeId, c1.weight, c1.score, c1.struc
order by c1.Id
Diese Abfrage funktioniert nur bei Abwesenheitsknoten, aber nicht bei höheren Ebenen. SQL Fiddle Link.
Bitte lassen Sie mich wissen, wie dies gelöst werden kann. Vielen Dank für die Hilfe im Voraus - :)
Danke für die Beispieldaten suchen. Kannst du auch die gewünschten Ergebnisse einbeziehen? –
gewünschte Ausgabe als Antwort hinzugefügt, wie ich meine Frage nicht bearbeiten kann, überprüfen Sie bitte. –