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
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
Comment