Stored Procedure Abfrage

andi060283

Benutzer
Beiträge
8
Hallo,

ich möchte folgende Stored Procedure erfolgreich ausführen:

Code:
insert into tbl_tmp_rpt_Flugteilnehmer

SELECT
tblFlugAirline.sAirline,
tblFlugAirline.sAirEmpfänger,
tblFlugAirline.sAirStrasse,
tblFlugAirline._sLandStammID,
tblFlugAirline._sPLZStammID,
tblFlugAirline.sAirOrt,
@sFlugstrecken as sFlugstrecken,
@sFlugdaten as sFlugdaten,
@sCode as sCode,
@sTextauswahl as sText,
'sReiseNr'=
cast(tblReiseStamm.nReNr as varchar(10)),

tblReiseStamm.datTerminVon,
tblReiseStamm.datTerminBis,
 + ' ' + tblKundeStamm.sNName + ' ' + tblKundeStamm.sVName + ' ' + tblKundeStamm.sWeitereVornamen,
  'sKunde' = case when [tblKundeStamm].[nAnredeKz]=1 then 'Mr.  '
        else case when [tblKundeStamm].[nAnredeKz]=6 then 'Mrs. '
        else case when [tblKundeStamm].[nTitel2Kz]=4 then 'van der '
        else case when [tblKundeStamm].[nTitel2Kz]= 22 then 'Ffr von'
        else case when [tblKundeStamm].[nTitel2Kz]= 25 then 'Baron von'
        else case when [tblKundeStamm].[nTitel2Kz]= 19 then 'Consul'
        else '' end end end end end end   + ' ' + tblKundeStamm.sNName + ' ' + tblKundeStamm.sVName + ' ' + tblKundeStamm.sWeitereVornamen,
'sUser' = system_user
--

FROM tblFlugAirline,

Die Abfragen kommen von einer Tabelle "tblKundeStamm" mit den Spalten "nAnredeKz" und "nTitel2Kz".
Die Anrede soll aus nAnredeKz und nTitel2Kz zusammengesetzt werden mit den Feldern sName, sVName und sWeitereVornamen. Es funktioniert auch bis auf das einfügen der Sonderanreden aus nTitel2Kz wie z.B. "Baron von". Anscheinend kann ich in der Case-Abfrage nur Werte einer Spalte nehmen. Wie kann ich ich aber die Werte aus z.B. else case when [tblKundeStamm].[nTitel2Kz]= 25 then 'Baron von' auslesen damit die Werte erfolgreich zurückgeliefert werden? Innerhalb des Cases funktioniert es leider nicht. Inwieweit muss die Abfrage umgebaut werden?

Der String wird erfolgreich zusammengebaut es steht nun Mr. Huber (sNName) Michael (sVName) Andreas (sWeitereVornamen) im Report der Abfrage. Die Sonderanreden wie "Baron von" werden aber ignoriert!

Grüße
Andreas
 
Werbung:
Also in deinem Konstrukt steht hinter tblReiseStamm.datTerminBis, ein + am Anfang der Spalte, dafür hinter tblKundeStamm.sWeitereVornamen ein Komma, müsste da nicht eher ein +sein um den Baron von dahinter zu verketten? Dannach geht es dann ja mit + und Leerschritt weiter, da wird also wieder verkettet.

Was ist denn wenn tblKundeStamm.sWeitereVornamen z.B. NULL ist? Das wird gar nicht abgefangen und der Leerschritt davor wird in dem Fall nicht verworfen. Hinter Baron von und diversen anderen Einträgen sind manchmal Leerschritte, manchmal nicht.
 
Im Quellcode ist ein Fehler, diese Zeile hinter "tblReiseStamm.datTerminBis," gehört gelöscht:
Code:
 + ' ' + tblKundeStamm.sNName + ' ' + tblKundeStamm.sVName + ' ' + tblKundeStamm.sWeitereVornamen,

ob ich hinter 'Baron von' einen Leerschritt mache also 'Baron von ' ändert nichts am Verhalten. Meiner Meinung ist in der "case"-Anweisung der Fehler, jedoch weiß ich nicht nicht, wie ich den Code umschreiben kann damit die Sonderanreden in "nTitel2Kz" auch angezeigt werden!
 
Ich glaube du hast zuviele CASE eingebaut. Wenn ich mir das recht überlege suchst du doch eigentlich blos:
Code:
tblReiseStamm.datTerminVon,
tblReiseStamm.datTerminBis,
  'sKunde' = ( case when [tblKundeStamm].[nAnredeKz] = 1 then 'Mr.  '
                   when [tblKundeStamm].[nAnredeKz] = 6 then 'Mrs. '
                   when [tblKundeStamm].[nTitel2Kz] = 4 then 'van der '
                   when [tblKundeStamm].[nTitel2Kz] = 22 then 'Ffr von '
                   when [tblKundeStamm].[nTitel2Kz] = 25 then 'Baron von '
                   when [tblKundeStamm].[nTitel2Kz] = 19 then 'Consul '
                   else ''
                   end ) + ' ' + tblKundeStamm.sNName + ' ' + tblKundeStamm.sVName + ' ' + tblKundeStamm.sWeitereVornamen,
'sUser' = system_user
oder
Code:
tblReiseStamm.datTerminVon,
tblReiseStamm.datTerminBis,
  'sKunde' = ( case [tblKundeStamm].[nAnredeKz]
                   when 1 then 'Mr.  '
                   when 6 then 'Mrs. '
                   when 4 then 'van der '
                   when 22 then 'Ffr von '
                   when 25 then 'Baron von '
                   when 19 then 'Consul '
                   else ''
                   end ) + ' ' + tblKundeStamm.sNName + ' ' + tblKundeStamm.sVName + ' ' + tblKundeStamm.sWeitereVornamen,
'sUser' = system_user
Das sind die beiden Schreibweisen die ich kenne und erstere nutze ich auch. Mit deiner bin ich nicht vertraut, mag gehen (Syntaxprüfung sagt ok) aber ist mir nicht geläufig daher hab ich mich da jetzt nicht mit befasst.
 
Danke für deinen Beitrag. Noch immer wird leider "nTitel2Kz" ignoriert. Es wird dann nur die Anrede also das Feld von [tblKundeStamm].[nAnredeKz] also Mr. oder Mrs. und der Vorname, weitere Vorname, Name angezeigt also in meinem Beispiel Mr. Huber Gerhard. Das Feld von [tblKundeStamm].[nTitelKz] z.B. Baron wird ignoriert. Entferne ich aber die Zeilen von [tblKundeStamm].[nAnredeKz] und starte den case bei [tblKundeStamm].[nTitel2Kz] dann wird Baron Huber Gerhard angezeigt, dann fehlt jedoch "Mr". Ziel soll sein, dass "Mr. Baron Huber Gerhard" angezeigt wird.
 
Ach jetzt sehe ich erst das es um 2 Spalten im CASE geht, dann:
Code:
  'sKunde' = ( case when [tblKundeStamm].[nAnredeKz] = 1 then 'Mr.  '
                   when [tblKundeStamm].[nAnredeKz] = 6 then 'Mrs. '
                  else ''
                  end ) +
           ( case when [tblKundeStamm].[nTitel2Kz] = 4 then 'van der '
                   when [tblKundeStamm].[nTitel2Kz] = 22 then 'Ffr von '
                   when [tblKundeStamm].[nTitel2Kz] = 25 then 'Baron von '
                   when [tblKundeStamm].[nTitel2Kz] = 19 then 'Consul '
                   else ''
                   end ) + ' ' + tblKundeStamm.sNName + ' ' + tblKundeStamm.sVName + ' ' + tblKundeStamm.sWeitereVornamen,
Denn, es kann ja beides gesetzt sein. Das CASE läuft bis die erste Bedingung erfüllt ist. Bricht also ggf. bei Mr. ab und berücksichtigt dann nicht nTitel2Kz. Folglich musst du beide Spalten getrennt berücksichtigen und ggf. verketten.
 
Werbung:
Zurück
Oben