Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Verknüpfen einer 3. Tabelle

Dieses Thema im Forum "Microsoft SQL Server" wurde erstellt von Meister_Knobi, 4 August 2014.

  1. Meister_Knobi

    Meister_Knobi Aktiver Benutzer

    Guten Tag,

    ich bin es leid jedes mal mit Excel und dem SVERWEIS noch im nachhinein zu arbeiten.

    Ich habe diese 2 Abfragen:

    Code:
    Select 
       a.Artikelnr, 
       a.Arttext,
       a.EANCODE,
       p1.MATERIAL as EK
    From 
       ARTIKEL a
       RIGHT JOIN PREISE p1 ON
       a.Artikelnr=p1.Artikelnr And
       p1.PREISLST="1"  
    WHERE
       a.KZSperre not like "1" and
       (a.KZART = "0" or
       a.KZART = "3") 
    Order By 
       ARTIKELNR;

    Code:
    Select 
       a.Artikelnr,
       p.MATERIAL as UVP   
    From 
       ARTIKEL a
       RIGHT JOIN
       PREISE p
       ON
       a.Artikelnr
       =
       p.Artikelnr
    WHERE
       p.PREISLST="1"
    Order By 
       ARTIKELNR;
    Die Ergebnisse verknüpfe ich dann mit SVERWEIS aneinander.

    Mir gelingt es jedoch nicht diese sofot per SQL miteinander zu verbinden, wie ich es in der 1. Abfrage schon geschaft habe.

    Code:
    Select 
       a.Artikelnr,
       a.Arttext,
       a.EANCODE,
       p1.MATERIAL as EK,
       p2.MATERIAL as UVP
    From 
       ARTIKEL a
       RIGHT JOIN PREISE p1 ON
       a.Artikelnr=p1.Artikelnr And
       p1.PREISLST="1" 
       RIGHT JOIN PREISE p2 ON
       a.Artikelnr=p2.Artikelnr And
       p1.PREISLST="20"
    WHERE
       a.KZSperre not like "1"
    Order By 
       ARTIKELNR;
    
    Fehler Code kann ich leider nicht liefern, da diese Abfrage meine ganze WaWi zum Absturz bringt.
    Wo liegt da mein Fehler?
     
    Zuletzt von einem Moderator bearbeitet: 4 August 2014
  2. gente

    gente Benutzer

    Hallo, ich würde im Order By mal die Artikelnummer mit der Tabelle angeben. D.h. a.Artikelnr - ansonsten sehe ich keinen offensichtlichen Fehler.
     
  3. Meister_Knobi

    Meister_Knobi Aktiver Benutzer

    Ok, das a.ArtikelNr hat geholfen, jetzt bekomm ich wenigstens nen Fehler angezeigt. Zudem habe ich im 2. Right Join eine falsche Tabelle angegeben.

    Code:
    Select 
       a.Artikelnr,
       p1.MATERIAL as EK
       p2.MATERIAL as UVP
    From 
       ARTIKEL a
       RIGHT JOIN PREISE p1 ON
       a.Artikelnr=p1.Artikelnr And
       p1.PREISLST="1" 
       RIGHT JOIN PREISE p2 ON
       a.Artikelnr=p2.Artikelnr And
       p2.PREISLST="20"
    WHERE
       a.KZSperre not like "1"
    Order By 
       a.ARTIKELNR;
    
    Diese Abfrage spuckt mir jetzt diesen Fehler aus:

    SQL-Fehler in Schritt 1:
    TA_SQL.SelectQuery: Can't format message 13:896 -- message file \\ms-bl01\firebird.msg not found.
    Token unknown - line 4, column 2.
    P2.

    Ich habe keine Ahnung woran das liegt.
     
    Zuletzt von einem Moderator bearbeitet: 5 August 2014
  4. ukulele

    ukulele Datenbank-Guru

    Ich denke mal das Problem liegt im RIGHT JOIN, bist du sicher das du nicht einen (bzw. zwei) LEFT JOINs brauchst?
     
  5. gente

    gente Benutzer

  6. Meister_Knobi

    Meister_Knobi Aktiver Benutzer

    Ich habe die JOINS schon mal durchgetauscht, kein ergebnis.
    jetzt gibs was wichtigeres zu tun, dann muss excel halt wieder herhalten.


    ich melde mich wenn ich in diesem Thema weiter kommen.
     
  7. Meister_Knobi

    Meister_Knobi Aktiver Benutzer

    Guten Tag,...

    Ich habe problem los meine Abfragen aus den Tabellen Artikel+Preise und Artikel+Umsätze mit einander verknüpft.

    Code:
    SELECT
       a.ARTIKELNR,
       a.ARTTEXT,
       a.KALKEK,
       sum( case when p.PREISLST=0 then p.MATERIAL else 0 end) as Preis00,
       ...
    FROM
       ARTIKEL a
    INNER JOIN
       PREISE p
    ON
       a.ARTIKELNR=p.ARTIKELNR   
    WHERE 
       a.KZSPERRE not like 1
    GROUP BY
       a.ARTIKELNR,
       a.ARTTEXT,
       a.KALKEK
    ORDER BY
       a.ARTIKELNR;
    Und

    Code:
    SELECT
       a.ARTIKELNR,
       a.ARTTEXT,
       a.KALKEK,
       sum( case when au.JAHR=2011 then au.VKWERT1+au.VKWERT2 end) as Umsatz2011,
       ...
    FROM
       ARTIKEL a
    INNER JOIN
       ARUMSATZ au
    ON
       a.ARTIKELNR=au.ARTIKELNR   
    WHERE 
       a.KZSPERRE not like 1
    GROUP BY
       a.ARTIKELNR,
       a.ARTTEXT,
       a.KALKEK
    ORDER BY
       a.ARTIKELNR;
    Wenn ich jedoch jetzt diese Beiden verbinden möchte erhalte ich Falsche Werte bei allen Agragat Funktionen. Auch andere JOIN-Typen machen das nicht richtig.
    Code:
    SELECT
       a.ARTIKELNR,
       a.ARTTEXT,
       a.KALKEK,
       sum( case when p.PREISLST=0 then p.MATERIAL else 0 end) as Preis00,
       ...
       sum( case when au.JAHR=2011 then au.VKWERT1+au.VKWERT2 end) as Umsatz2011, 
       ...
    FROM       ARTIKEL a
    LEFT JOIN     PREISE p     ON   a.ARTIKELNR=p.ARTIKELNR
    LEFT JOIN     ARUMSATZ au     ON   a.ARTIKELNR=au.ARTIKELNR
    WHERE 
       a.KZSPERRE not like 1
    GROUP BY
       a.ARTIKELNR,
       a.ARTTEXT,
       a.KALKEK
    ORDER BY
       a.ARTIKELNR;
    Ich erhalte für jeden einzelnen Datensatz ein n-vielfaches als Ergebniss. Für jeden datensatz untersciedlich. ich habe Stichproben gemacht: ein mal 7fach ein mal 52fach ein mal 13fach. Und das bei allen Ergebnissen die durch eine Agregatfunktion erzeugt wurden.
     
    Zuletzt von einem Moderator bearbeitet: 5 August 2014
  8. akretschmer

    akretschmer Datenbank-Guru

    Zeig mal bitte die Definition der Tabellen und je 2-3 Datensätze, was rauskommt und was rauskommen sollte.
     
  9. Meister_Knobi

    Meister_Knobi Aktiver Benutzer

    So sieht es aus:































    3000​
    Frosch Kuno m. Originalsound
    1,269​
    0​
    9,87​
    10,59​
    8,34​
    8,88​
    9,87​
    0​
    0​
    9,39​
    0​
    0​
    0​
    0​
    0​
    0​
    0​
    0​
    0​
    0​
    0​
    20,97​
    19,47​
    20,97​
    1202,4​
    3148,7​
    495​
    1296
    3004​
    Vollgummikeule mit Schleuderseil
    1,188​
    0​
    11,07​
    11,88​
    9,69​
    9,93​
    11,07​
    0​
    0​
    10,53​
    0​
    0​
    0​
    0​
    0​
    0​
    0​
    0​
    0​
    0​
    0​
    23,97​
    20,97​
    23,97​
    416,79​
    784,53​
    153​
    288
    3005​
    Snack Rugby 9,5cm zum Befüllen
    0,876​
    0​
    8,07​
    8,67​
    7,26​
    7,23​
    8,07​
    0​
    0​
    7,68​
    0​
    0​
    0​
    0​
    0​
    0​
    0​
    0​
    0​
    0​
    0​
    17,37​
    14,97​
    17,37​
    840,42​
    643,68​
    423​
    324​
































    So soll es sein:































    3000​
    Frosch Kuno m. Originalsound
    1,269​
    0​
    3,29​
    3,53​
    2,78​
    2,96​
    3,29​
    0​
    0​
    3,13​
    0​
    0​
    0​
    0​
    0​
    0​
    0​
    0​
    0​
    0​
    0​
    6,99​
    6,49​
    6,99​
    0​
    133,6​
    349,86​
    0​
    55​
    144
    3004​
    Vollgummikeule mit Schleuderseil
    1,188​
    0​
    3,69​
    3,96​
    3,23​
    3,31​
    3,69​
    0​
    0​
    3,51​
    0​
    0​
    0​
    0​
    0​
    0​
    0​
    0​
    0​
    0​
    0​
    7,99​
    6,99​
    7,99​
    0​
    46,31​
    87,17​
    0​
    17​
    32
    3005​
    Snack Rugby 9,5cm zum Befüllen
    0,876​
    0​
    2,69​
    2,89​
    2,42​
    2,41​
    2,69​
    0​
    0​
    2,56​
    0​
    0​
    0​
    0​
    0​
    0​
    0​
    0​
    0​
    0​
    0​
    5,79​
    4,99​
    5,79​
    0​
    93,38​
    71,52​
    0​
    47​
    36​
































    Das erste erstellt mit einer Abfrage, das zweite aus zweiabfargen mit excel zusammen geflikt.
     
  10. Meister_Knobi

    Meister_Knobi Aktiver Benutzer

    Ich weiß nicht warum er die Formatierung Sprengt. hier ein sauberes Bild
     

    Anhänge:

  11. akretschmer

    akretschmer Datenbank-Guru

    Nein, bitte kein Bild.

    Deine Abfragen aus dem ersten Post und die zuletzt gezeigte sind komplett unterschiedlich. Bitte mach ein NACHVOLLZIEHBARES Beispiel.

    Ich habe versucht, die Struktur der Tabellen zu erraten und die Abfrage aus dem ersten Posting nachzuvollziehen:

    Code:
    test=*# select * from artikel ;
     nr |  t  |  ean  | kzsperre | kzart
    ----+-----------+-------+----------+-------
      1 | artikel 1 | ean  | 0  | 1
      2 | artikel 2 | ean 2 | 0  | 1
    (2 rows)
    
    test=*# select * from preise ;
      material  | artnr | preislist
    ------------+-------+-----------
     material 1 |  1 | 20
     material 2 |  2 | 20
    (2 rows)
    
    test=*# select a.nr, a.t, a.ean, p1.material as ek, p2.material as uvp from artikel a right join preise p1 on a.nr=p1.artnr right join preise p2 on a.nr=p2.artnr and p1.preislist = '20' where a.kzsperre not like '1' order by a.nr;
     nr |  t  |  ean  |  ek  |  uvp
    ----+-----------+-------+------------+------------
      1 | artikel 1 | ean  | material 1 | material 1
      2 | artikel 2 | ean 2 | material 2 | material 2
    (2 rows)
    
    Ich weiß aber nicht, was Du in den Tabellen hast, erwartest und bekommst.
     
  12. Meister_Knobi

    Meister_Knobi Aktiver Benutzer

    Irgendwie hat das Forum 2 meiner Threads einer von heute einer von gestern zusammen geführt. Eigentlich habe ich den 7. Post in einem andern Thread gepostet. Der alte link wird auch auf diesen Thread umgeleitet: http://www.datenbankforum.com/threads/falsche-ergebnisse-nach-verknuepfen-einer-3-tabelle.1941/


    Also diese Abfrage:
    SELECT
    a.ARTIKELNR,
    a.ARTTEXT,
    a.KALKEK,
    sum( case when p.PREISLST=0 then p.MATERIAL else 0 end) as Preis00,
    {…},
    sum( case when au.JAHR=2011 then au.VKWERT1+au.VKWERT2+au.VKWERT3+au.VKWERT4+au.VKWERT5+au.VKWERT6+au.VKWERT7+au.VKWERT8+au.VKWERT9+au.VKWERT10+au.VKWERT11+au.VKWERT12 end) as Umsatz2011,
    {…}
    FROM ARTIKEL a
    LEFT JOIN PREISE p ON a.ARTIKELNR=p.ARTIKELNR
    LEFT JOIN ARUMSATZ au ON a.ARTIKELNR=au.ARTIKELNR
    WHERE
    a.KZSPERRE not like 1
    GROUP BY
    a.ARTIKELNR,
    a.ARTTEXT,
    a.KALKEK
    ORDER BY
    a.ARTIKELNR;


    erzeugt dieses Ergebnis:
    03000 Frosch Kuno m. Originalsound 1,269 0 9,8710,59 8,34 8,889,870 0 9,390 0 0 0 0 0 0 0 0 0 0 20,97 19,47 20,97 1202,4 3148,74 495 1296


    03004 Vollgummikeule mit Schleuderseil1,188 0 11,07 11,88 9,699,9311,07 0 0 10,53 0 0 0 0 0 0 0 0 0 0 0 23,97 20,97 23,97 416,79 784,53 153 288


    03005 Snack Rugby 9,5cm zum Befüllen 0,876 0 8,078,677,26 7,238,070 0 7,680 0 0 0 0 0 0 0 0 0 0 17,37 14,97 17,37 840,42 643,68 423 324


    Diese Daten sind aber nicht korrekt.

    Die 2 Abfragen:
    SELECT
    a.ARTIKELNR,
    a.ARTTEXT,
    a.KALKEK,
    sum( case when p.PREISLST=0 then p.MATERIAL else 0 end) as Preis00,
    {…}
    FROM
    ARTIKEL a
    INNER JOIN
    PREISE p
    ON
    a.ARTIKELNR=p.ARTIKELNR
    WHERE
    a.KZSPERRE not like 1
    GROUP BY
    a.ARTIKELNR,
    a.ARTTEXT,
    a.KALKEK
    ORDER BY
    a.ARTIKELNR;


    und:
    SELECT
    a.ARTIKELNR,
    a.ARTTEXT,
    a.KALKEK,
    sum( case when au.JAHR=2011 then au.VKWERT1+au.VKWERT2+au.VKWERT3+au.VKWERT4+au.VKWERT5+au.VKWERT6+au.VKWERT7+au.VKWERT8+au.VKWERT9+au.VKWERT10+au.VKWERT11+au.VKWERT12 end) as Umsatz2011,
    {…}
    FROM
    ARTIKEL a
    INNER JOIN
    ARUMSATZ au
    ON
    a.ARTIKELNR=au.ARTIKELNR
    WHERE
    a.KZSPERRE not like 1
    GROUP BY
    a.ARTIKELNR,
    a.ARTTEXT,
    a.KALKEK

    ORDER BY
    a.ARTIKELNR;


    mit Excel zusammen geschustert ergeben:
    03000 Frosch Kuno m. Originalsound 1,269 0 3,29 3,53 2,78 2,96 3,29 0 0 3,13 0 0 0 0 0 0 0 0 0 0 0 6,99 6,49 6,99 0 133,6 349,86 0 55 144


    03004 Vollgummikeule mit Schleuderseil 1,188 0 3,69 3,96 3,23 3,31 3,69 0 0 3,51 0 0 0 0 0 0 0 0 0 0 0 7,99 6,99 7,99 0 46,31 87,17 0 17 32


    03005 Snack Rugby 9,5cm zum Befüllen 0,876 0 2,69 2,89 2,42 2,41 2,69 0 0 2,56 0 0 0 0 0 0 0 0 0 0 0 5,79 4,99 5,79 0 93,38 71,52 0 47 36



    Die „{…}” sind Codezeilen die ich rausgenommen habe, da sich dort der Code exakt wiederholt, nu rein Index steigert sich von Zeile zu Zeile. Ich weiß nicht wie ich die Ausgaben Formatiren soll, deswegen das Bild
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden