Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Ergebnisse anders zurückgeben

Dieses Thema im Forum "Microsoft SQL Server" wurde erstellt von Tahref, 21 Februar 2017.

  1. Tahref

    Tahref Neuer Benutzer

    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
     
  2. ukulele

    ukulele Datenbank-Guru

    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?
     
  3. Tahref

    Tahref Neuer Benutzer

    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:"
     
  4. ukulele

    ukulele Datenbank-Guru

    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.
     
  5. Tahref

    Tahref Neuer Benutzer

    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.
     
  6. ukulele

    ukulele Datenbank-Guru

    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.
     
  7. Tahref

    Tahref Neuer Benutzer

    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.
     
  8. drdimitri

    drdimitri Datenbank-Guru

    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.
     
  9. ukulele

    ukulele Datenbank-Guru

    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.
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden