Announcement

Collapse
No announcement yet.

Unterabfrage mit if und where

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Unterabfrage mit if und where

    Hallo,

    bin schon seit stunden an suchen und machen mit einer Abfrage.

    Und zwar folgendes, soll in meiner Unterabfrage passieren.

    __________________________________________________ _________
    (if (select KundNummer from Kundenstamm where ArtiLieferant.KundId = Kundenstamm.KundId) IS NULL then 0 else (select KundNummer from Kundenstamm where ArtiLieferant.KundId = Kundenstamm.KundId) endif) as LiefNr,
    __________________________________________________ _________

    Wenn kein Eintrag gefunden wird der in Tabelle Kundenstamm und ArtiLieferant die passen soll eine 0 zurück gegeben werden und wenn ein passender Eintrag gefunden wird soll halt KundNummer zurück gegeben werden.

    Und genau da ist mein Problem. Diese Unterabfrage bzw. die gesamte Abfrage (füge ich am Ende an) ignoriert schlicht die Datensätze wo die Unterabfrage keine Übereinstimmung liefert.


    Grob mal Sinn dieser Abfrage, es sollen ArtikelNummer, ArtikelBezeichnung, ArtikelMatchCode, ArtikelEan, ME einheiten, Bestellnummer, Warengruppe, LieferantenNummer (hier ist dann wieder die erwähnte unterabfrage) und die ganzen ArtikelListenpreise mit Ihren Gültigkeitsdatum ausgegeben werden.


    Hier mal die komplette Abfrage: __________________________________________________ _________
    select DISTINCT ArtiStamNummer as ArtNr,
    ArtikelBezeich as Kurzbezeichnung,
    ArtiStamMatch as MatchCode,
    ArtiStamEAN as EAN,
    me_nummerverpgew as ME,
    LiefArtikelNummer as BstNr,
    WaGruNummer as Warengruppe,
    (if (select KundNummer from Kundenstamm where ArtiLieferant.KundId = Kundenstamm.KundId) IS NULL then 0 else (select KundNummer from Kundenstamm where ArtiLieferant.KundId = Kundenstamm.KundId) endif) as LiefNr,
    (select top 1(ArtiLisPreis) from ArtiListenPreis where PreisLisNummer = 1 and ArtiLisPrGruppe = Artikel.ArtiLisPrGrupVK order by artilisprabdat desc) as VKP1,
    (select top 1(ArtiLisPreis) from ArtiListenPreis where PreisLisNummer = 2 and ArtiLisPrGruppe = Artikel.ArtiLisPrGrupVK order by artilisprabdat desc) as VKP2,
    (select top 1(ArtiLisPreis) from ArtiListenPreis where PreisLisNummer = 3 and ArtiLisPrGruppe = Artikel.ArtiLisPrGrupVK order by artilisprabdat desc) as VKP3,
    (select top 1(ArtiLisPreis) from ArtiListenPreis where PreisLisNummer = 4 and ArtiLisPrGruppe = Artikel.ArtiLisPrGrupVK order by artilisprabdat desc) as VKP4,
    (select top 1(ArtiLisPreis) from ArtiListenPreis where PreisLisNummer = 5 and ArtiLisPrGruppe = Artikel.ArtiLisPrGrupVK order by artilisprabdat desc) as VKP5,
    (select top 1(ArtiLisPreis) from ArtiListenPreis where PreisLisNummer = 6 and ArtiLisPrGruppe = Artikel.ArtiLisPrGrupVK order by artilisprabdat desc) as VKP6,
    (select top 1(artilispreiseinh) from ArtiListenPreis where PreisLisNummer = 4 and ArtiLisPrGruppe = Artikel.ArtiLisPrGrupVK order by artilisprabdat desc) as PE_VK,
    (select top 1(ArtiLisPreis) from ArtiListenPreis where PreisLisNummer = 101 and ArtiLisPrGruppe = Artikel.ArtiLisPrGrupEK order by artilisprabdat desc) as EKBrutto,
    (select top 1(ArtiLisPreis) from ArtiListenPreis where PreisLisNummer = 102 and ArtiLisPrGruppe = Artikel.ArtiLisPrGrupEK order by artilisprabdat desc) as EKNetto,
    (select top 1(artilispreiseinh) from ArtiListenPreis where PreisLisNummer = 102 and ArtiLisPrGruppe = Artikel.ArtiLisPrGrupEK order by artilisprabdat desc) as PE_EK,
    (select top 1(ArtiLisPreis) from ArtiListenPreis where PreisLisNummer = 103 and ArtiLisPrGruppe = Artikel.ArtiLisPrGrupEK order by artilisprabdat desc) as EKRabatt,
    (select top 1(ArtiLisPrAbDat) from ArtiListenPreis where ArtiLisPrGruppe = Artikel.ArtiLisPrGrupVK order by artilisprabdat desc) as AbDatum,
    (select top 1(ArtiLisPrBisDat) from ArtiListenPreis where ArtiLisPrGruppe = Artikel.ArtiLisPrGrupVK order by artilisprabdat desc) as BisDatum

    from Artikelstamm join Artikel
    on Artikel.ArtiStammId = Artikelstamm.ArtiStammId left outer join ArtiListenPreis
    on Artikel.ArtiLisPrGrupVK = ArtiListenPreis.ArtiLisPrGruppe join ArtiLieferant
    on ArtiLieferant.ArtiStammId = Artikelstamm.ArtiStammId
    where ArtiListenPreis.ArtiLisPrGruppe = Artikel.ArtiLisPrGrupVK
    //and AbDatum is not null
    and ArtiStamLoekennz = 0 and ArtikelLoeKennz = 0
    ORDER BY ArtNr asc,ArtNr, Warengruppe
    __________________________________________________ _________

    Habe das Gefühl es ist egal was ich in meine Unterabfrage schreibe, ich habe das ganz auch schon umgestellt und mit IS NOT gearbeitet, immer dann wenn kein entsprechder Eintrag gefunden wird, wird der komplette Datensatz ignoriert.

    Ach ja das ganz läuft unter Sybase Anywhere 10.

    Habt Ihr evtl noch eine Idee?

    Danke schonmal für die Mühe.

    Gruß

    Marc

  • #2
    Hallo Marc,

    glaubst du wirklich, dass man sich so durch deinen Code durchwühlen kann? Kannst du das denn selbst lesen und verstehen? Code ist zu markieren!

    1. Gehe auf deinen ersten Beitrag zum "Editieren".
    2. Gehe dann auf "Erweitert".
    3. Code beginnt mit [highlight=sql]und endet mit [/highlight].
    4. Statt überlanger Zeilen sind Zeilenumbrüche notwendig, notfalls auch nochmals vor einem Gleichheitszeichen.
    5. Code ist immer sinnvoll einzurücken und dadurch zu gliedern.
    6. Tabellennamen werden in der Regel durch einen Alias abgekürzt.
    7. Benutze die Vorschau; erst wenn alles sauber aussieht, dann Speichern.

    Zusätzlich glaube ich, dass statt 14 Einzelteilen (oder wie viele es auch sind) etwa 3 dieser Teile genügen. Und Spaltennamen wie ArtiLisPrGrupVK sind natürlich völlig verständlich und selbsterklärend.

    Du möchtest Hilfe von uns, also solltest du uns die Arbeit erleichtern und nicht unnötig erschweren. Jürgen

    Comment

    Working...
    X