| taqwa |
Geschrieben am: Sa 2.02.2008, 01:21
|
|
AyomRank 1 ![]() ![]() Gruppe: Member (inaktiv) Beiträge: 4 Mitglied seit: 2.02.2008 |
hallo
ms sql server 2000 oder 2005 bin kurz vor der verzweiflung. habe eine tabelle mit dem feld position, die folgender massen ausschaut. im feld position muss ich die anzahl der auftragspositionen schreiben, siehe untere tabellen. also wenn ein neuer auftrag beginnt wieder mit 1,2,3 ,4 weitermachen. hat mir jemand ein script, danke alexander tabelle vor dem schreiben ordnr Position article_id 700069 0 06999 700069 0 06991 700069 0 06995 700069 0 06555 700069 0 06344 700070 0 06222 700071 0 06922 700072 0 06999 700073 0 06985 700073 0 06964 tabelle nach dem schreiben ordnr Position article_id 700069 1 06999 700069 2 06991 700069 3 06995 700069 4 06555 700069 5 06344 700070 1 06222 700071 1 06922 700072 1 06999 700073 1 06985 700073 2 06964 |
![]() |
| jAuer Jürgen Auer - freiberufl. Programmierer |
#2 Geschrieben am: Sa 2.02.2008, 22:17 (+20:56)
|
|
AyomRank 9 Gruppe: Experten Entwicklung Beiträge: 2304 Mitglied seit: 4.02.2006 |
Es gibt zwei Varianten:
1. Schreibe einen Trigger, der beim Speichern eines Datensatzes prüft (simples Count(*)), ob es bereits Einträge zu derselben ordnr gibt. Der neue Wert ist dann Count(*) + 1. 2. Speichere das gar nicht, sondern ergänze das erst beim Auslesen. Dummerweise geht das beim MS-SqlServer 2000 nicht so elegant, man müßte die IDs in eine temporäre Tabelle mit AutoIncrement speichern, um die Zeilenposition zu kriegen. Im Sql-2005 läßt sich das mit row_number() Over (Order By Spaltenname) elegant lösen. -------------------- Web-Anwendung 3.0: Ein Online-Kalender für Termine vieler Filialen.
server-daten - die Single-Data-Solution: Web-Datenbanken als Online - CRM - Lösung. Ihre Geschäftsprozesse entscheiden, was Ihre Online-Datenbank macht. Sie konzentrieren sich auf Ihr Kerngeschäft - die Datenbank funktioniert. |
![]() |
| taqwa |
#3 Geschrieben am: Sa 2.02.2008, 22:35 (+00:17)
|
|
AyomRank 1 ![]() ![]() Gruppe: Member (inaktiv) Beiträge: 4 Mitglied seit: 2.02.2008 |
ok, erstmal danke
|
![]() |
| jAuer Jürgen Auer - freiberufl. Programmierer |
#4 Geschrieben am: So 3.02.2008, 22:39 (+24:03)
|
||||
|
AyomRank 9 Gruppe: Experten Entwicklung Beiträge: 2304 Mitglied seit: 4.02.2006 |
So, inzwischen hat sich herausgestellt, daß per Select die leere Tabelle komplett gefüllt wird. Damit ist ein Trigger nicht mehr sinnvoll - der oben angedachte Trigger geht von einer Einzelzeileneinfügung aus. Und ein row_number() Over (Order By Spalte) scheidet auch aus, weil verschiedene ordnr gemeinsam behandelt werden, die Zählung soll ja immer bei 1 neu beginnen. Trotzdem ist das Problem mit einer einzigen zusätzlichen Update-Anweisung lösbar: Prinzip: Die ordnr-Spalte liefert das Zählkriterium. Gibt es drei Zeilen mit demselben ordnr-Wert, dann soll die erste davon mit 1, die zweite mit 2 und die dritte mit 3 aktualisiert werden. Das klappt über eine Selbstverknüpfung der Tabelle über sich selbst, über die dann aggregiert wird. ID sei der Primärschlüssel der Tabelle:
Jeder Datensatz wird einmal sich selbst zugeordnet (damit Count(*) >= 1), dann werden noch alle IDs zur gleichen ordnr gesucht, die größer sind. Das zählt also einfach zu jeder ID die Zahl der Datensätze mit gleicher ordnr und größergleicher ID. Der Rest dürfte klar sein - das obige in eine Unterabfrage und damit aktualisieren:
Da die Fragestellung von allgemeinem Interesse ist, macht es auch Sinn, das hier reinzuschreiben. -------------------- Web-Anwendung 3.0: Ein Online-Kalender für Termine vieler Filialen.
server-daten - die Single-Data-Solution: Web-Datenbanken als Online - CRM - Lösung. Ihre Geschäftsprozesse entscheiden, was Ihre Online-Datenbank macht. Sie konzentrieren sich auf Ihr Kerngeschäft - die Datenbank funktioniert. |
||||
![]() |
Thema wird von 0 Benutzer(n) gelesen (0 Gäste und 0 anonyme Benutzer)
0 Mitglieder:
Trackback-Url: http://www.ayom.com/track/t/22791
![]() |
![]() ![]() ![]() |
| Themen Titel | Autor | Views | Antworten | Letzte Aktion |
| Text datei mit 500000 Zeilen bearbeiten | Siegfried_D | 751 | 6 | Do 20.09.2007, 09:21 |
| Mysql-Zeilen nach Textlänge sortierien | Alain Aubert | 643 | 2 | Sa 4.09.2004, 20:02 |
Anzeige - [Interessiert an einer Anzeige?]













