Hallo,
ich habe in einer Tabelle von MS SQL mehrere Datensätze, wo z.B. der Name gleich ist, jedoch die PAT_ID unterschiedlich ist. Jetzt möchte ich den ersten aus einer Gruppe in eine andere Tabelle kopieren bzw. erstmal selektieren.
Wie mache ich das?
Ich komm beim Besten Willen nicht drauf.
Wäre klasse wenn ihr mir helfen könntet.
z.B.:
SELECT tabelle_1.*
FROM tabelle_1,
(SELECT name,
MIN(pat_id) as pat_id
FROM tabelle_1
GROUP BY
name ) A
WHERE tabelle_1.name = A.name and
tabelle_1.pat_id = A.pat_id
Hallo,
ich kann im Moment leider nicht helfen.
Viele Grüße
Ralf Schneider
Entschuldige, ich hatte nicht sofort Zeit.
Ich bin nicht sicher, ob ich die Frage richtig verstanden habe: alle - jeweils den ersten - Datensatz in einer Tabelle heraussuchen, die gleichen Namen haben, um ihn dann weiterzuverarbeiten.
Mit einer einfachen SQL Anweisung kann ich dies auch nicht ohne weiteres lösen. Das unten angegebene einfache VB-Skript sollte aber Dein Problem lösen. Kopiere dazu die Befehle in eine Datei mit Endung .vbs und führen diese Datei aus (Doppelklick). Du musst vorher noch Deine Daten einfügen (überall wo ‚your‘ steht):
yourdatabase = Deine Datenbank
yourSQLserver= Dein Servername
yourTable = Deine Tabelle
yourName = Dein Feldname (der mehrfach vorkommt)
Die mit ’ gekennzeichneten Zeile ist auskommentiert und würde am Bildschirm eine Kontroll-Message erzeugen.
Mit der zur Zeit auskommentierten Zeile
’ Conn.Execute( sql-Anweisung )
kannst Du einen SQL Anwesiung einfügen, um die Daten weiterzuverarbeiten.
Hier das Skript:
ConnectionString=„DRIVER={SQL Server};SERVER=yourSQLserver;TIMEOUT=60;DATABASE=yourDatabase“
Set Conn = CreateObject(„ADODB.Connection“)
Conn.Open ConnectionString
Set rs=Conn.Execute(„SELECT distinct yourName FROM yourTable“)
Do While Not rs.EOF
'msgbox(rs(„yourName“))
Set rsd=Conn.Execute(„SELECT top 1 * FROM yourTable WHERE yourName=“ & rs(„yourName“))
’ Conn.Excute( sql-Anweisung )
rs.MoveNext
Loop
Conn.Close
Hallo,
Du musst die Funktion FIRST verwenden.
Nimm zum Beispiel die folgende Tabelle:
ID/Name
1/Alex
2/Peter
3/Alex
4/Peter
Wenn du immer nur den ersten Datensatz derer mit gleichem Namen willst, dann nimmst du dieses Statement:
SELECT FIRST( id ), name FROM tabelle GROUP BY name
Das SELECT kannst du natürlich in ein INSERT einbetten.
Schöne Grüße, Robert
Wenn die Datenbank unnötig redundante Informationen enthält, sollten diese Doubletten gelöscht werden.
Andernfalls, die Datenbank sequentiell durchstreifen.
Name lesen und Listen
So lange weiterfahren, bis ein neuer Name kommt und wieder lesen und auflisten.
Oder einfach:
CREATE UNIQUE INDEX index_name
ON table_name (column_name)