In SQL 2008, ich bin auf der Suche nach einer Möglichkeit, alle 0s oben, dass auf den nächsten Wert zu konvertieren 0 ist nicht Grundsätzlich ich dies wollen:Wenn ein Tabellenwert 0 ist, wie kann ich den nächst höheren Wert, der nicht 0 ist, auswählen?
+--------+-------+
| Number | Cost |
+--------+-------+
| 1 | 5.84 |
| 2 | 0.00 |
| 3 | 0.00 |
| 4 | 0.00 |
| 5 | 0.00 |
| 6 | 5.98 |
| 7 | 0.00 |
| 8 | 0.00 |
+--------+-------+
Um wie folgt aussehen:
+--------+-------+
| Number | Cost |
+--------+-------+
| 1 | 5.84 |
| 2 | 5.84 |
| 3 | 5.84 |
| 4 | 5.84 |
| 5 | 5.84 |
| 6 | 5.98 |
| 7 | 5.98 |
| 8 | 5.98 |
+--------+-------+
Das Problem ist, eine Schleife ist super Besteuerung, da ich dies auf Tausende von Werten tun muss. Hier ist die Schleife, die ich versucht habe:
WHILE (SELECT COUNT(*) FROM #table WHERE cost is null) > 0
BEGIN
UPDATE TOP (1) #table
SET cost = ((select cost from #table t2 where (f2.number = #table.number + 1)))
WHERE cost = 0
END
Irgendwelche Ideen Jungs?
Sie sind viel besser dran, zuerst mit der Ergebnismenge arbeiten, dann stellen Sie die Daten zu ziehen. – durbnpoisn
Was meinst du genau? – Steven
Es ist schwer zu sagen, weil uns der Kontext fehlt, aber es sieht wie ein zutiefst fehlerhaftes Schemadesign aus, in dem Sie (mindestens) eine zusätzliche Spalte in dieser Tabelle haben sollten. –