TSQL - Abfrage filtern
Hallo.
Ich habe in meiner Datenbank 3 Tabellen, aus denen ich mittels eines Select-Befehld in Kombination mit einem Inner Join Daten abrufe.
Meine Abfrage:
funktioniert soweit.
Problem dabei: Ich möchte das Ergebniss nur für einen Datensatz erhalten.
Dazu muss ich die Abfrage mittels Where filtern.
Hab ich schion öfter gemacht, funktioniert auch an sich.
Das Problem ist das inner join.
Sobald ich ein Inner Join UND ein Where drin habe, erhalte ich einen Syntaxfehler.
Meine Abfrage mit dem Where-Statement:
select concat (B.Belegtyp, B.Belegnummer, ';', B.Adressnummer /*Adressnummer*/ , ';', CONVERT(VARCHAR(10), B.Datum, 104) , ';', L.Firma , ';', L.Zusatz , ';', L.Zusatz2 , ';', L.Strasse , ';', L.Ort , ';', L.PLZ , ';', K.Telefon1 , ';', K.Telefon2)
from beleg as B inner join ADRESS as L on L.Adresstyp = 'QL'+B.Belegnummer inner join KUNDEN as K on B.Adressnummer = K.Nummer
Ich möchte nur den Datensatz haben, in dem der Belegtyp (B.Belegtyp in belege) = L ist und die Belegnummer (B.Belegnummer in belege) = 18000001
Wie muss ich die Abfrage umbauen, um das gewünschte Ergebniss zu bekommen?
Danke & LG
Ich habe in meiner Datenbank 3 Tabellen, aus denen ich mittels eines Select-Befehld in Kombination mit einem Inner Join Daten abrufe.
Meine Abfrage:
select concat (B.Belegtyp, B.Belegnummer, ';', B.Adressnummer /*Adressnummer*/ , ';', CONVERT(VARCHAR(10), B.Datum, 104) , ';', L.Firma , ';', L.Zusatz , ';', L.Zusatz2 , ';', L.Strasse , ';', L.Ort , ';', L.PLZ , ';', K.Telefon1 , ';', K.Telefon2)
from beleg as B inner join ADRESS as L on L.Adresstyp = 'QL'+B.Belegnummer inner join KUNDEN as K on B.Adressnummer = K.Nummer
funktioniert soweit.
Problem dabei: Ich möchte das Ergebniss nur für einen Datensatz erhalten.
Dazu muss ich die Abfrage mittels Where filtern.
Hab ich schion öfter gemacht, funktioniert auch an sich.
Das Problem ist das inner join.
Sobald ich ein Inner Join UND ein Where drin habe, erhalte ich einen Syntaxfehler.
Meine Abfrage mit dem Where-Statement:
select concat (B.Belegtyp, B.Belegnummer, ';', B.Adressnummer /*Adressnummer*/ , ';', CONVERT(VARCHAR(10), B.Datum, 104) , ';', L.Firma , ';', L.Zusatz , ';', L.Zusatz2 , ';', L.Strasse , ';', L.Ort , ';', L.PLZ , ';', K.Telefon1 , ';', K.Telefon2)
from beleg as B inner join ADRESS as L on L.Adresstyp = 'QL'+B.Belegnummer inner join KUNDEN as K on B.Adressnummer = K.Nummer
Ich möchte nur den Datensatz haben, in dem der Belegtyp (B.Belegtyp in belege) = L ist und die Belegnummer (B.Belegnummer in belege) = 18000001
Wie muss ich die Abfrage umbauen, um das gewünschte Ergebniss zu bekommen?
Danke & LG
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 373641
Url: https://administrator.de/contentid/373641
Ausgedruckt am: 23.11.2024 um 05:11 Uhr
11 Kommentare
Neuester Kommentar
Die gezeigten Abfragen sind identisch und syntaktisch korrekt.
Wie wäre es mit
Wie wäre es mit
select concat (B.Belegtyp, B.Belegnummer, ';', B.Adressnummer /*Adressnummer*/ , ';', CONVERT(VARCHAR(10), B.Datum, 104) , ';', L.Firma , ';', L.Zusatz , ';', L.Zusatz2 , ';', L.Strasse , ';', L.Ort , ';', L.PLZ , ';', K.Telefon1 , ';', K.Telefon2)
from beleg as B inner join ADRESS as L on L.Adresstyp = 'QL'+B.Belegnummer inner join KUNDEN as K on B.Adressnummer = K.Nummer
WHERE B.Belegtyp = 'L' AND B.Belegnummer = 18000001
Moin,
ich vermisse dein "where"...
Und auch, welchen Syntaxfehler du erhältst.
Mache es doch so:
Wenn deine Belegnummer allerdings vom Typ Char() ist, musst du
schreiben.
Edit: du müsstest im ersten InnerJoin Korrekterweise auch it CONCAT arbeiten
Gruß
em-pie
ich vermisse dein "where"...
Und auch, welchen Syntaxfehler du erhältst.
Mache es doch so:
select
concat (
B.Belegtyp
,B.Belegnummer, ';',
,B.Adressnummer, ';'
,CONVERT(VARCHAR(10), B.Datum, 104), ';'
,L.Firma, ';'
,L.Zusatz, ';'
,L.Zusatz2, ';'
,L.Strasse, ';'
,L.Ort, ';'
,L.PLZ, ';'
,K.Telefon1, ';'
,K.Telefon2
)
from
beleg as B
inner join ADRESS as L
on L.Adresstyp = 'QL'+B.Belegnummer
inner join KUNDEN as K
on B.Adressnummer = K.Nummer
where
b.Belegtyp = 'L'
and b.belegnummer = 18000001
Wenn deine Belegnummer allerdings vom Typ Char() ist, musst du
and b.belegnummer = '18000001'
Edit: du müsstest im ersten InnerJoin Korrekterweise auch it CONCAT arbeiten
inner join ADRESS as L
on L.Adresstyp = CONCAT('QL', B.Belegnummer)
Gruß
em-pie
Moin,
Du hast dein CASE()-Statement falsch eingesetzt...
und hier noch ein Link bzgl. "null", denn Null ist Null, keine 0 und auch kein Leer
Du hast dein CASE()-Statement falsch eingesetzt...
und hier noch ein Link bzgl. "null", denn Null ist Null, keine 0 und auch kein Leer
CASE
When Firma IS NULL Then B.Firma
ELSE L.Firma
END as Firma
Du hast mich oben nicht richtig verstanden.
Las dein ganzes Geraffel mal mit dem
weg und setze stattdessen 1:1 meinen Schnipsel oben ein.
Um zum Test lasse die einfach mal beide Felder anzeigen:
also einmal L.Firma sowie B.Firma
Las dein ganzes Geraffel mal mit dem
(select case when L.Firma IS NULL THEN B.Firma ELSE L.Firma END as Firma from beleg as B inner join ADRESS as L on L.Adresstyp = 'Q'+B.Belegtyp+B.Belegnummer where B.Belegnummer = '18000001' and B.Belegtyp = 'L'
),
weg und setze stattdessen 1:1 meinen Schnipsel oben ein.
Um zum Test lasse die einfach mal beide Felder anzeigen:
also einmal L.Firma sowie B.Firma
2.) Belegnummer 18000002
Hier gibt es keinen Wert in L.Firma, es sollte also der Wert aus B.Firma angezeigt werden.
Jedoch ist das Ergebniss komplett leer (NULL)
Ist es jetzt LEER oder NULL, also was wird angezeigt?Hier gibt es keinen Wert in L.Firma, es sollte also der Wert aus B.Firma angezeigt werden.
Jedoch ist das Ergebniss komplett leer (NULL)