1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen
  2. Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, Oracle, Sql-Server, Postgres, Access uvm
    Information ausblenden

aus einer tabelle 2 machen unter bestimmten kriterien

Dieses Thema im Forum "Microsoft SQL Server" wurde erstellt von aleksschmit, 24 Oktober 2010.

  1. aleksschmit

    aleksschmit Benutzer

    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
     
  2. thomas_w

    thomas_w Datenbank-Guru

    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
     
  3. aleksschmit

    aleksschmit Benutzer

    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?
     
  4. thomas_w

    thomas_w Datenbank-Guru

    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
     
  5. thomas_w

    thomas_w Datenbank-Guru

    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
     
  6. aleksschmit

    aleksschmit Benutzer

    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")
     
  7. thomas_w

    thomas_w Datenbank-Guru

    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
     
  8. aleksschmit

    aleksschmit Benutzer

    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
     
  9. aleksschmit

    aleksschmit Benutzer

    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...
     
Die Seite wird geladen...

Diese Seite empfehlen