So wählen Sie info aus Zeile oben?
Möchte ich noch hinzufügen einer Spalte meiner Tabelle ist wie folgt:
Dies ist nur ein Beispiel, wie die Tabelle strukturiert ist, die wirkliche Tabelle ist mehr als 10.000 Zeilen.
No_ Name Account_Type Subgroup (New_Column)
100 Sales 3
200 Underwear 0 250 *100
300 Bikes 0 250 *100
400 Profit 3
500 Cash 0 450 *400
Also für jedes mal, wenn ein Wert in 'Untergruppe' ich will die (New_Column), um den Wert [No_] aus der Zeile oben
No_ Name Account_Type Subgroup (New_Column)
100 Sales 3
150 TotalSales 3
200 Underwear 0 250 *150
300 Bikes 0 250 *150
400 Profit 3
500 Cash 0 450 *400
Gibt es Fälle, wo die Tabelle ist, wie das oben, wo zwei "Überschriften" sind oben. Und in diesem Fall möchte ich auch die erste Zeile oben (150) in diesem Fall.
Ist dies ein Fall für einen cursor oder was empfehlen Sie?
Den Daten geliefert wird, No_
--EDIT--
Ab der ersten Zeile und dann läuft Sie durch die ganze Tabelle:
Gibt es eine Möglichkeit, ich kann speichern Sie den Wert für [No_], wo [Untergruppe] ist "?
Und nach fügen Sie diese [No_] Wert in (New_Column) in jeder Zeile mit dem Wert in der [Untergruppe] Zeile.
Und wenn der [Untergruppe] - Zeile leer ist, wird der Prozess in Gang halten, das einsetzen der nächsten [No_] Wert in (New_Column), ist, dass wenn die nächste Zeile hat einen Wert in [Untergruppe]
Hier ist ein besseres Bild für das, was ich versuche zu tun:
- Ich schlage vor, Normalisierung: en.wikipedia.org/wiki/Database_normalization
- Wie definieren Sie die Zeile oben ?? SQL Server hat keine "built-in" Sortierung - es sei denn, du geben Sie explizit eine
ORDER BY
- Klausel, es gibt keine Sortierung - es gibt also keine Zeile über entweder.... - Bitte erweitern Sie ein wenig mehr auf ", wo die zwei "Überschriften" oben". Bitte klären Sie sowohl 'Header' und 'oben' was. Ich versteh nicht, was du meinst. Danke!
- Die Zeile oben in meinem Fall ist die Zeile oben ein Wert in [Untergruppe). Ich dachte an einen filter verwenden [wo Untergruppe = " ] irgendwie?
- Tatsächlich die Frage ist wirklich nicht klar
- Menschen sind versucht, Sie wissen zu lassen, dass Begriffe wie "oben" sind bedeutungslos in SQL, es sei denn, Sie definieren einen bestimmten Auftrag (z.B. sind Sie bestellt
No_
für die Zwecke dieser Abfrage?) - Sorry, Sie sind bestellt von No_
- Wollen Sie die (new_column) - Wert max(no_), wo account_type <> 0?
Du musst angemeldet sein, um einen Kommentar abzugeben.
SQL Server 2012 schlägt mit Fenster, Offset-Funktionen.
In diesem Fall : LAG
Etwas wie dieses:
Hier ist ein Beispiel von MS:
http://technet.microsoft.com/en-us/library/hh231256.aspx
Die ROW_NUMBER-Funktion ermöglicht es Ihnen, um herauszufinden, welche Nummer der Zeile ist, sondern weil es eine Fenster-Funktion, die Sie verwenden (common table expression, CTE), um die join-Tabelle mit sich selbst.
Hoffe, das hilft.
ROW_NUMBER()
Werte werden zugewiesen effektiv zufällig an den Tisch. Wenn die Werte in der CTE zweimal bewertet werden (Sie sind mit diesem self-join), dierow_number
s belegte auf der zweiten Durchgang sind nicht garantiert korrelieren in keiner Weise mit denen aus dem ersten Durchlauf. In der Tat, es ist im Bereich des möglichen, dass Sie könnten am Ende Zusammenfügen wird jede Zeile für sich.over (order by [No_])
- es ist an der Zeit, dass SQL Server implementiert auch dielag()
Funktionlag()
windowing-Funktion wie die meisten anderen DBMS zu tun...ORDER BY 1
ist ungültig innerhalb derOVER()
und gibt einen Fehler zurück.ORDER BY 1
kann arbeiten wie ein normalerORDER BY
- Klausel, aber Sie ist hässlich.Nächsten Abfrage Namen der Eltern Zeile statt der Zeile selbst, d.h. Vertrieb für Vertrieb, Unterwäsche, Fahrräder; und Gewinn für Gewinn, Cash:
So, in SQL Server 2008 erstellt habe ich test-Tabelle mit 3 Werte:
Einfügen in die Tabelle, das tut, was Sie brauchen (zumindest wenn richtig verstanden) sieht wie folgt aus:
[Dieser Teil Hinzugefügt] Und arbeiten mit der Untergruppe - ändern Sie einfach das innere select herausfiltern es:
declare @ttable table ( all the same )