aus einer tabelle 2 machen unter bestimmten kriterien

aleksschmit

Benutzer
Beiträge
5
Hallo Leute;
ich habe eine tabelle, die vereinfacht so aussieht: tabele1
Bezeichnung | inhalt
------------------------
nr | 8000
name | meier
ort | hamburg
nr | 5000
name | miller
ort | berlin
daten die nach nr folgen gehören inhaltlich zusammen bis nächste nr auftritt
es gilt daraus daten zu extrahieren wie folgt:
nr | name | ort
-------------------------
8000 | meier | hamburg
5000 | miller | berlin
nur die lösungsansatz die ich versuchte zu realisieren geht nicht
ich habe jeweils alle nr, dann, alle namen und alle orten in 3 verschiedene tabellen extrahiert mit
SELECT inhalt FROM tabelle1 WHERE bezeichnung="nr"
und wollte die joinen, aber 1. es gibt kein join-kriterium
2. ordnung wird verletzt, d.h. zu nr 8000 gehören jetzt daten von miller und nicht von meier wie es sein sollte

kann mir da jemand helfen, wie ich das hinkriegen soll?
besten dank im voraus
 
Werbung:

thomas_w

Datenbank-Guru
Beiträge
104
AW: aus einer tabelle 2 machen unter bestimmten kriterien

Wenn die Tabelle wirklich so aussieht, hast Du mit SQL wenig Möglichkeiten
Code:
feld | wert
------------------------
nr | 8000
name | meier
ort | hamburg
nr | 5000
name | miller
ort | berlin
Es muss wenigsten eine ID pro Datensatz oder noch besser eine ID pro Datensatzgruppe und pro Datensatz existieren
Code:
ID | feld | wert
------------------------
1 | nr | 8000
2 | name | meier
3 | ort | hamburg
4 | nr | 5000
5 | name | miller
6 | ort | berlin
Grüße
Thomas
 

aleksschmit

Benutzer
Beiträge
5
AW: aus einer tabelle 2 machen unter bestimmten kriterien

Danke für den Anwort, Thomas. ich dacht mir schon hier herscht die gähnende leere.
Durschnummerierung aller zeilen habe ich jetzt gemacht. und auch eine id pro gruppe festgelegt mit hilfe von group by.
Die aufgabe scheint mir jetzt aber nicht einfacher geworden zu sein :(

Wie soll ich weiter vorgehen?
 

thomas_w

Datenbank-Guru
Beiträge
104
AW: aus einer tabelle 2 machen unter bestimmten kriterien

Liefere doch mal die Tabellenstruktur (CREATE TABLE .. quelltabelle ) sowie ein paar sinnvolle Testdaten (INSERT ... ) Dann kann ich bei mir eventuell eine SQL-Lösung ausprobieren.

Grüße
Thomas
 

thomas_w

Datenbank-Guru
Beiträge
104
AW: aus einer tabelle 2 machen unter bestimmten kriterien

Das Verteilen der Daten geht dann in etwa so:
Code:
INSERT INTO zieltabelle
SELECT feld1, feld2, feld3
  FROM quelltabelle
....

Grüße
Thomas
 

aleksschmit

Benutzer
Beiträge
5
AW: aus einer tabelle 2 machen unter bestimmten kriterien

Hallo Thomas. hier ist de struktur
CREATE TABLE myTable (recordnr integer AUTOINC NEXTVALUE 1 STEP 1, feld c(10), wert c(19))
INSERT INTO myTable (feld, wert) VALUES ("knr", "800")
INSERT INTO myTable (feld, wert) VALUES ("nachname", "meyer")
INSERT INTO myTable (feld, wert) VALUES ("vorname", "markus")
INSERT INTO myTable (feld, wert) VALUES ("wohort", "muenchen")
INSERT INTO myTable (feld, wert) VALUES ("knr", "400")
INSERT INTO myTable (feld, wert) VALUES ("nachname", "hofer")
INSERT INTO myTable (feld, wert) VALUES ("wohort", "hamburg")
INSERT INTO myTable (feld, wert) VALUES ("knr", "300")
INSERT INTO myTable (feld, wert) VALUES ("nachname", "keller")
INSERT INTO myTable (feld, wert) VALUES ("vorname", "karl")
INSERT INTO myTable (feld, wert) VALUES ("knr", "500")
INSERT INTO myTable (feld, wert) VALUES ("nachname", "schmit")
INSERT INTO myTable (feld, wert) VALUES ("vorname", "sascha")
INSERT INTO myTable (feld, wert) VALUES ("wohort", "siegen")
 

thomas_w

Datenbank-Guru
Beiträge
104
AW: aus einer tabelle 2 machen unter bestimmten kriterien

So, habe es mal mit MySQL gelöst. Das Ganze klappt nur, wenn pro Gruppe auch identisch viele Spalten in "MyTable" sind. In Deinen Testdaten sind manchmal vier und dann wieder drei Datensätze pro Gruppe.
Code:
CREATE TABLE myTable (
 recordnr integer NOT NULL AUTO_INCREMENT,
 feld varchar(10),
 wert varchar(19),
 PRIMARY KEY (recordnr)
);
INSERT INTO myTable (feld, wert) VALUES ("knr", "800");
INSERT INTO myTable (feld, wert) VALUES ("nachname", "meyer");
INSERT INTO myTable (feld, wert) VALUES ("vorname", "markus");
INSERT INTO myTable (feld, wert) VALUES ("wohort", "muenchen");
 
INSERT INTO myTable (feld, wert) VALUES ("knr", "400");
INSERT INTO myTable (feld, wert) VALUES ("nachname", "hofer");
INSERT INTO myTable (feld, wert) VALUES ("vorname", "heinz");
INSERT INTO myTable (feld, wert) VALUES ("wohort", "hamburg");
 
INSERT INTO myTable (feld, wert) VALUES ("knr", "300");
INSERT INTO myTable (feld, wert) VALUES ("nachname", "keller");
INSERT INTO myTable (feld, wert) VALUES ("vorname", "karl");
INSERT INTO myTable (feld, wert) VALUES ("wohort", "kleinweiler");
 
INSERT INTO myTable (feld, wert) VALUES ("knr", "500");
INSERT INTO myTable (feld, wert) VALUES ("nachname", "schmit");
INSERT INTO myTable (feld, wert) VALUES ("vorname", "sascha");
INSERT INTO myTable (feld, wert) VALUES ("wohort", "siegen");
 
SELECT (SELECT wert FROM mytable WHERE recordnr = gruppe.von_nr ) AS knr,
       (SELECT wert FROM mytable WHERE recordnr = gruppe.von_nr +1) AS nachname,
       (SELECT wert FROM mytable WHERE recordnr = gruppe.von_nr +2) AS vorname,
       (SELECT wert FROM mytable WHERE recordnr = gruppe.von_nr +3) AS wohort
  FROM (SELECT von.recordnr AS von_nr, bis.recordnr AS bis_nr
          FROM ( SELECT wert, MIN(recordnr) AS recordnr
                   FROM mytable
                  WHERE feld = 'knr'
                  GROUP BY wert
               ) von
 
          JOIN ( SELECT wert, MIN(recordnr) AS recordnr
                   FROM mytable
                  WHERE feld = 'wohort'
                  GROUP BY wert
               ) bis
            ON von.recordnr = bis.recordnr - 3
       ) gruppe
ORDER BY gruppe.von_nr;
+------+----------+---------+-------------+
| knr  | nachname | vorname | wohort      |
+------+----------+---------+-------------+
| 800  | meyer    | markus  | muenchen    |
| 400  | hofer    | heinz   | hamburg     |
| 300  | keller   | karl    | kleinweiler |
| 500  | schmit   | sascha  | siegen      |
+------+----------+---------+-------------+
4 rows in set (0.00 sec)
mysql>

So weit so nett, das Ganze natürlich ohne Gewähr.

Grüße
Thomas
 

aleksschmit

Benutzer
Beiträge
5
AW: aus einer tabelle 2 machen unter bestimmten kriterien

Danke Thomas, werde es gleich bei mir ausprobieren. in der echte tabelle sind aber NUR knr und name immer dabei. andere angaben können fehlen, also anzahl spalten ist nicht identisch. bei fehlenden angaben soll null wert eingefügt werden
 
Werbung:

aleksschmit

Benutzer
Beiträge
5
AW: aus einer tabelle 2 machen unter bestimmten kriterien

Super, Thomas! das funktieoniert bestens! vielen dank für deine mühe. muss mir jetzt überlegen was ich mache wenn die angaben fehlen...
 
Oben