Ergebnisse anders zurückgeben

Tahref

Neuer Benutzer
Beiträge
4
Hallo Forum,

ich habe ein Problem und ich hoffe Ihr könnt mir da weiter helfen.

Und zwar möchte ich ein Ergebnis in einer Sicht anders zurückgeben als es in der Datenbank steht.
Es Handelt sich immer um den selben Text:

"Aus Auftrag AB16-453371 vom 08.12.2016:"
Die Auftrags-Nummer und das Datum sind variablen und ändern sich je nach Belegnummer.

Dieser Text wird immer automatisch vom System erstellt. Die Belege sind jedoch Mehrsprachig. Die Sprachen aus jedem Beleg habe ich auch. Aber ich weiss nicht wie ich es umsetzen kann.
Es gibt Deutsch, Englisch, Italienisch, Französisch, Spanisch

Bei Deutsch bleitb der Text so stehen.
Wenn Englisch dann sollte der Text umformatiert werden in:
"Order No. AB16-453371 dated 08.12.2016:"

oder wenn Italienisch dann:
"Dell ordine AB16-453371 del 08.12/2016: "

Ich denke mal ich muss hier mit der CASE-Funktion arbeiten aber wie komme ich einzelnd an die Belegnummer und das Datum und gebe es anders wieder aus ?

Hier die Formel die ich momentan verwende:
Select BP.Artikelbezeichnung, B.Belegnummer, SP.Bezeichnung
from BelegePositionen BP
INNER JOIN Belege B on B.BelegeID = Bp.BelegeID
INNER JOIN Sprachen SP on B.SprachenID = SP.SprachenID
where BP.BelegeID = '4935340' and BP.PositionsTyp = 2

Ich hoffe ich konnte meine Frage klar ausdrucken und könnt mir hier helfen :)

Vielen Dank und schöne Grüße, Tha
 
Werbung:
Also verstehe ich das richtig es wird in der Tabelle ein Text, auch noch in spezifischer Sprache, gespeichert aber die westentlichen Merkmale des Beleges wie Datum und Auftragsnummer sind nicht in entsprechenden Spalten in der Tabelle abgelegt?
 
Nein der Text im Ergebnis ist "immer" in Deutsch.
Also immer:
"Aus Auftrag AB16-453371 vom 08.12.2016:"
oder
"Aus Auftrag AB17-453371 vom 08.02.2017:"

Diesen möchte ich zB wenn die Belegsprache Englisch ist gerne in Englisch zurückgeben.
Also : "Order No. AB16-453371 dated 08.12.2016:"
 
Okay aber Auftragsnummer und Datum liegen dir nicht in gesonderten Spalten vor sondern nur in Text? Normalerweise speichert man Text vielleicht noch zusätzlich aber ein Datum schon in einer Datumsspalte.
 
Dieser Text wird automatisch vom System erstellt. Ich hab da leider keinen Zugriff darauf.
Und ja es wird alles in einem Text ausgegeben und nix gesondert.
 
Naja du hast ja SQL Code gepostet, also greifst du auf die Datenbank zu. Kannst du z.B. auch ein Select * an die Datenbank übergeben? Ansonsten kannst du dich mit dem SQL Management Studio auf die Datenbank verbinden, dort findest du definitiv alle Spalten. Allerdings brauchst du Zugriffsrechte.
 
Na klar aber wenn ich * mache finde ich diese Werte in keiner anderen Zeile. Nur in dieser. Das ist ja das Problem.

Ich bin übrigens schon auf dem SQL Server und habe versucht irgendwie anders auf die Daten zuzugreifen.
Selbst das Softwareunternehmen konnte nicht auf die Daten zugreifen.

Daher dachte ich, das ich die Ergebniss abfangen kann und anders zurück geben kann.
 
Wenn du irgendwo ein Kennzeichen hast, mit welcher Sprache der Anwender grade arbeitet, kannst Du einfach per CASE und REPLACE arbeiten.
Im CASE frägst Du die Sprache ab, und im REPLACE ersetzt du den String "Aus Auftrag" durch das jeweilige länderspezifische äquivalent.
 
Werbung:
Natürlich ginge das aber es hat Nachteile. Wenn der Text unerwarteter Weise ein nicht das Format hat was erwartet wird, scheitert dein ganzer Select.

Hier mal ein Beispiel:
Code:
SELECT   t3.auftragsnr,
     t3.datum,
     (   CASE
       WHEN   s.sprache = 'DE'   THEN   t3.textspalte_original
       WHEN   s.sprache = 'IT'   THEN   'Test ' + t3.auftragsnr + ' ' + convert(VARCHAR(10),t3.datum,123)
       [...]
       ELSE   t3.textspalte_original
       END ) AS textspalte
FROM   (

SELECT   left(t2.textspalte,charindex(' ',t2.textspalte)-1) AS auftragsnr,
     convert(DATE,right(t2.textspalte,len(t2.textspalte)-charindex(' ',t2.textspalte)),104) AS datum,
     t2.textspalte_original
FROM   (

SELECT   replace(replace(replace(t1.textspalte,'Aus Auftrag ',''),' vom',''),':','') AS textspalte,
     t1.textspalte AS textspalte_original
FROM   tabelle t1

     ) t2

     ) t3
LEFT JOJN tbl_sprache s
ON     [...]
Das sind jetzt erstmal mehrere Schritte (daher mehrere in einander verschachtelte Selects) in den der String bereinigt, zerlegt und in ein ordentliches Format gebracht wird. Jetzt kannst du per CASE Anhand der Sprache das passende Datumsformat ausgeben lassen, in einen Text konvertieren und mit dem Rest verketten sowie weitere Tabellen joinen.

Man kann das auch in einem (sehr langen, unübersichtlichen) Schritt machen oder eine eigene Funktion dafür schreiben und diese im Select aufrufen.
 
Zurück
Oben