MS-Office-Forum

Zurück   MS-Office-Forum > Microsoft Access & Datenbanken > SQL
Registrieren Forum Hilfe Alle Foren als gelesen markieren

Banner und Co.

Antworten
Ads
Themen-Optionen Ansicht
Alt 28.05.2018, 14:12   #1
Wordstar
Neuer Benutzer
Neuer Benutzer
Standard Admin : MSSQL - Zähler für Headposition

Hallo zusammen,

ich habe da mal eine Frage.

Ich habe eine Tabelle die ich sequentiell aus einer Textdatei geladen haben.

ID Identifier
1 Head
2 Position
3 Position
4 Position
5 Position
6 Head
7 Position
8 Position
9 Head
10 Position
etc

Zwischen Head und Position gibt es keine Beziehung (außer die physische Reihenfolge). Somit
bräuchte ich zur Weiterverarbeitung eine Art Headposition als Relation:



HeadPosition ID Identifier
1 1 Head
1 2 Position
1 3 Position
1 4 Position
1 5 Position
2 6 Head
2 7 Position
2 8 Position
3 9 Head
3 10 Position
etc.


Kann man das mit einem Schleifen-Select mit Zähler lösen und wie wäre hier der Code?

Für sachdienliche Hinweise wäre ich dankbar.

Gruß, Andreas
Wordstar ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 28.05.2018, 18:41   #2
hcscherzer
MOF Guru
MOF Guru
Standard

Wenn Du Dich mit dem CURSOR beschäftigst, das ist das klassische Werkzeug um Daten sequentiell zu verarbeiten.

Hier ein Link mit einem Codebeispiel.

__________________

Freundlichen Gruß
Hans-Christian
-----------------------------------------
Oft erwünscht, selten beachtet: nach Erledigung des Problems den Thread als erledigt zu markieren
-----------------------------------------
Ich möchte nur Mitglied in einem Verein sein, der Leute wie mich nicht als Mitglied aufnimmt (Groucho Marx).
-----------------------------------------
Ab sofort regelmässig: MOF Stammtisch in Bremen. Näheres hier.
hcscherzer ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 29.05.2018, 07:41   #3
sonic8
MOF Koryphäe
MOF Koryphäe
Standard

Zitat: von hcscherzer Beitrag anzeigen

Wenn Du Dich mit dem CURSOR beschäftigst, das ist das klassische Werkzeug um Daten sequentiell zu verarbeiten.

Die sequenzielle Verarbeitung sollte idealerweise nach dem Import abgeschlossen sein. In der DB ist i.d.R. eine relationale Verarbeitung vorzuziehen.
Code:

/*
  CREATE TABLE dev.ImportedData (
		ID int NOT NULL PRIMARY KEY , 
		Identifier varchar(100) NOT NULL
		);

INSERT INTO dev.ImportedData (ID, Identifier)
		VALUES (1, 'Head'),
			(2, 'Position'),
			(3, 'Position'),
			(4, 'Position'),
			(5, 'Position'),
			(6, 'Head'),
			(7, 'Position'),
			(8, 'Position'),
			(9, 'Head'),
			(10, 'Position');
*/
SELECT h.ID AS HeadId,
	p.ID AS PosId,
	p.Identifier AS PosIdentifier
FROM dev.ImportedData AS h,
	 dev.ImportedData AS p
WHERE h.Identifier = 'Head'
AND p.ID > h.ID
AND NOT EXISTS (SELECT 'x' 
		FROM dev.ImportedData tmp
		WHERE tmp.Id > h.ID
		AND tmp.ID <= p.ID
		AND tmp.Identifier = 'Head'
	);

__________________

Office / Access 2019: Rückkehr der Symbolleiste?
sonic8 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 29.05.2018, 08:44   #4
Wordstar
Threadstarter Threadstarter
Neuer Benutzer
Neuer Benutzer
Standard

Yo, danke Sonic.

Im Prinzip isst es das. Ich hab es noch den Header hinzugenommen
und einen dense_rank eingefügt.

select dense_rank() OVER (order by HeadId) as RealHeadId,* from
(SELECT h.ID AS HeadId,
p.ID AS PosId,
p.Identifier AS PosIdentifier
FROM E1_work.dbo.ImportedData AS h,
E1_work.dbo.ImportedData AS p
WHERE h.Identifier = 'Head'
AND p.ID > h.ID
AND NOT EXISTS (SELECT 'x'
FROM E1_work.dbo.ImportedData tmp
WHERE tmp.ID > h.ID
AND tmp.ID <= p.ID
AND tmp.Identifier = 'Head'
)
union
SELECT h.ID AS HeadId,
h.ID AS PosId,
h.Identifier AS PosIdentifier
FROM E1_work.dbo.ImportedData h where Identifier='Head' ) Imp

RealHeadId HeadId PosId PosIdentifier
-------------------- ----------- ----------- ----------------
1 1 1 Head
1 1 2 Position
1 1 3 Position
1 1 4 Position
1 1 5 Position
2 6 6 Head
2 6 7 Position
2 6 8 Position
3 9 9 Head
3 9 10 Position

(10 row(s) affected)

Schoenen Dank für die Hilfe. Gruß, Andreas
Wordstar ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Ads
Antworten


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Besucher: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge anzufügen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

vB Code ist An.
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist An.
Gehe zu


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:07 Uhr.


Partner und Co.
Access-Paradies -Alles rund um die Datenbank Microsoft Access -Code -Programme-Tools -Tipps   Kostenlose Tipps & Tricks, Downloads und Programme   www.kulpa-online.com - Tipps - Tricks - Tutorials - Meinungen - Downloads uvm...   vb@rchiv · Willkommen in der Welt der VB Programmierung   Access-Garhammer - Hier finden Sie jede Menge Beispiel-Datenbanken zu Access und mehr ...   mcseboard.de   Die Top Seite für Excel-VBA-Makros uvm.

Powered by: vBulletin Version 3.6.2 (Deutsch)
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

Copyright ©2000-2018 MS-Office-Forum. Alle Rechte vorbehalten.
Copyright ©Design: Manuela Kulpa ©Rechte: Günter Kramer
Eine Verwendung der Inhalte in anderen Publikationen, auch auszugsweise,
ist ohne ausdrückliche Zustimmung der Autoren nicht gestattet.