shtml08: SQL-Abfrage

Hallo User!

Ich bekomme eine SQL-Abfrage einfach nicht hin. (Nutze den Advantage Data Architect, falls dies eine nützliche Info sein sollte)

Ich habe verschiedene Artikel-EAN mit 13 Stellen und möchte nun die Hersteller herausbekommen. Damit ich nicht jede EAN einzeln nach Herstellern durchsuchen möchte ist eine Abfrage nötig die mir alle EAN gruppiert, die an 3.-7. Stelle gleich sind- siehe Schritt 1(diese 5 Stellen repräsentieren jeweils einen bestimmten Hersteller). Sinn des ganzen ist es, danach eine Spalte hinfügen zu können, die mir den jeweiligen Hersteller in die Zeile einfügt in der die EAN stehen mit der zugehörigen 5-stelligen Nummer(siehe Schritt 2).
Ich versuche nun vergeblich Abfragen für Schritt 1 und 2 hinzubekommen.. Kann mir dabei jmd. behilflich sein??? Ich wäre sehr dankbar, denn es ist enorm wichtig. MfG Daniel

In unterem Beispiel ist die Tabelle natürlich nur ein SEHR kleiner Ausschnitt.

EAN
9789054674757
9793861277162
9789054674658
9793861277179
9937425006151
9789054675426
9937515002865

1.Schritt

EAN
9789054674757
9789054674658
9789054675426
9793861277162
9793861277179
9937515002865
9937425006151

2.Schritt

EAN             HERSTELLER
9789054674757      X
9789054674658      X
9789054675426      X
9793861277162      V
9793861277179      V
9937515002865      C
9937425006151      N

  1. Hallo,

    Ich bekomme eine SQL-Abfrage einfach nicht hin. (Nutze den Advantage Data Architect, falls dies eine nützliche Info sein sollte)

    vermutlich nicht. Es hört sich nicht nach einem Datenbankmanagementsystem (DBMS) wie z.B. Oracle, MS SQL-Server, DB2, Informix, PostgreSQL, MySQL, SQLite, Jet-Engine (MS Access), FileMaker, FoxPro, dBase, ... an.

    Ich habe verschiedene Artikel-EAN mit 13 Stellen und möchte nun die Hersteller herausbekommen. Damit ich nicht jede EAN einzeln nach Herstellern durchsuchen möchte ist eine Abfrage nötig die mir alle EAN gruppiert, die an 3.-7. Stelle gleich sind-

    Dein DBMS verfügt ganz bestimmt über Zeichenkettenfunktion, die Dir helfen dieses Vorhaben ganz einfach umzusetzen:

    EAN             HERSTELLER
    9789054674757      X
    9789054674658      X
    9789054675426      X
    9793861277162      V
    9793861277179      V
    9937515002865      C
    9937425006151      N

    T-SQL, der SQL-Dialekt von MS SQL-Server, kennt z.B. die Funktion SUBSTRING(), MySQL übrigens auch. Die Chancen stehen gut, dass Dein DBMS ebenfalls etwas in dieser Richtung bietet.

    Freundliche Grüße

    Vinzenz

  2. [...]
    Ich habe verschiedene Artikel-EAN mit 13 Stellen und möchte nun die Hersteller herausbekommen. Damit ich nicht jede EAN einzeln nach Herstellern durchsuchen möchte ist eine Abfrage nötig die mir alle EAN gruppiert, die an 3.-7. Stelle gleich sind- siehe Schritt 1(diese 5 Stellen repräsentieren jeweils einen bestimmten Hersteller). Sinn des ganzen ist es, danach eine Spalte hinfügen zu können, die mir den jeweiligen Hersteller in die Zeile einfügt in der die EAN stehen mit der zugehörigen 5-stelligen Nummer(siehe Schritt 2).
    [...]

    Hallo,

    vielleicht hilft Dir ein Beispiel weiter. Ich benutze dafür SQLite3, aber mit anderen DBMS wird es ähnlich gehen. Zunächst mal Deine Beispieldaten einlesen:

    % sqlite3 -header -column ean.db
      SQLite version 3.5.7
      Enter ".help" for instructions
      sqlite> CREATE TABLE Articles(ean);
      sqlite> .import /dev/stdin Articles
      [...]

    Dann eine temporäre Tabelle für die Hersteller anlegen:

    sqlite> CREATE TEMPORARY TABLE Manufacturers
         ...>     AS SELECT DISTINCT substr(ean, 3, 4) AS id,
         ...>                        NULL AS name
         ...>                   FROM Articles;

    Nachschauen, was da nun drin gelandet ist:

    sqlite> SELECT * FROM Manufacturers;
      id          name
      ----------  ----------
      3742
      3751
      8905
      9386

    Namen eintragen:

    sqlite> UPDATE Manufacturers SET name = 'Alpha' WHERE id = '3742';
      sqlite> UPDATE Manufacturers SET name = 'Bravo' WHERE id = '3751';
      [...]

    Eine Spalte für die Hersteller in der Artikeltabelle anlegen und mit Werten füllen:

    sqlite> ALTER TABLE Articles ADD COLUMN manufacturer;
      sqlite> UPDATE Articles
         ...>    SET manufacturer = (
         ...>      SELECT name
         ...>        FROM Manufacturers
         ...>       WHERE id = substr(ean, 3, 4)
         ...>    );

    Und schließlich das Resultat begutachten:

    sqlite> SELECT * FROM Articles;
      ean            manufacturer
      -------------  ------------
      9789054674757  Charlie
      9793861277162  Delta
      9789054674658  Charlie
      9793861277179  Delta
      9937425006151  Alpha
      9789054675426  Charlie
      9937515002865  Bravo

    Ich hoffe, das hilft Dir weiter.

    cu,
    Murphy

    1. Danke euch beiden.. Substring hat mir dann weitergeholfen.

      @Murphy
      Leider ist es mit meinen Nummern nicht ganz so einfach wie ich gedacht habe. Denn meine Nummern bestehen,wie geschrieben aus 13 Stellen und da steckt ein sehr kompexes System hinter.

      MfG

      shtml