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

Erweiterung einer Abfrage ... Textausgabe List&Label mit Zeilenumbruch

Dieses Thema im Forum "Microsoft SQL Server" wurde erstellt von chgs2013, 8 März 2013.

  1. chgs2013

    chgs2013 Aktiver Benutzer

    Hallo zusammen,

    wieder mal suche ich eine speziellere Lösung, zur Ausgabe von zusätzlichen Infos.
    Diese Abfrage ist für Combit List&Label, eine Software um zB Rechnungsvorlagen zu generieren. Die Daten liegen in einer MS SQL DB und werden somit ausgelesen.
    Das ganze ist sicherlich eine kleinere Herausforderung.


    Ich habe folgende SQL-Abfrage, die prüft Artikel auf Stücklistenartikel und gibt diese als Liste aus, in diesem Fall Artikelnummer und Artikelname.

    Code:
    DECLARE @cName VARCHAR(1024)
    SELECT @cName = COALESCE(@cName  + '¶', '') + '['+tArt2.cArtNr + '] ' + tArt2.cName from tArtikel
    LEFT JOIN tStueckliste ON tStueckliste.kStueckliste = tArtikel.kStueckliste
    LEFT JOIN tArtikel AS tArt2 ON tArt2.kArtikel = tStueckliste.kArtikel
    WHERE tArtikel.cArtNr='"+VKS-RL180+"'
    SELECT cName = @cName
    



    Ich möchte die Abfrage nun so umbauen, dass mir das Lager und der Lagerplatz des Artikels angegeben wird.
    Da es für jeden Artikel mehrere Lager und Lagerplätze geben kann, macht es mir Probleme. :-(


    Implementiert werden müsste nun folgendes, der Lagername (cName) und das Lagerregal (cKommentar_1) und das Lagerfach (cKommentar_2).


    Der Aufbau der Tabellen siehe Bilder. In den Bildern sind Texte farblich hinterlegt, anbei die Erläuterung:

    lila = Tabellenname
    rot = Artikel-ID die übereinstimmen
    grün = muss in Abhängigkeit zu rot sein "tArtikel.cArtNr=Positionen.ArtNr"
    blau = Warenlager-ID die übereinstimmen muss



    Meine Wunschausgabe als Text wäre später so, dass der Artikel selbst nur einmal erscheint, aber untereinander alle Lager und deren Platz:

    ArtNr ... Artikelname ... Lager ... Lagerregal ... Lagerfach
    XXX ... Relais ... Lagerhalle 1 ... Regal 01-03 ... Fach 3
    ......................... Lagerhalle 2 ... Regal 01-02 ... Fach 13


    Danke für Eure Hilfe ....
     

    Anhänge:

  2. chgs2013

    chgs2013 Aktiver Benutzer

    Abfragen kann ich die Lager ja so

    Code:
    (SELECT    tWarenLager.cName, tWarenLagerPlatzArtikel.cKommentar_1, tWarenLagerPlatzArtikel.cKommentar_2
    FROM        tartikel INNER JOIN
                          tWarenLagerPlatzArtikel ON tartikel.kArtikel = tWarenLagerPlatzArtikel.kArtikel INNER JOIN
                          tWarenLager ON tWarenLagerPlatzArtikel.kWarenLagerPlatz = tWarenLager.kWarenLager
    WHERE tartikel.cArtNr = 'VKS-RL180')
     
  3. chgs2013

    chgs2013 Aktiver Benutzer

    Kann keiner hierzu helfen, wie ich die Abfrage damit erweitern kann? ... erhalte immer einen Fehler in der Ausgabe :(
     
  4. akretschmer

    akretschmer Datenbank-Guru

    Vorweg: ich nix M$SQL, die Syntax ist, ähm, anders als z.B. in PG.

    Du hast gefragt:

    Code:
    Meine Wunschausgabe als Text wäre später so, dass der Artikel selbst nur einmal erscheint, aber untereinander alle Lager und deren Platz:
    
    Ich könnte mir vorstellen, daß Du via row_number() oder einer vergleichbaren Funktion je Artikel die Zeilen zählst. In einem äußeren Select gibts Du nur den Artikel aus, wenn diese row_number() - Zeile 1 ist, sonst '' oder '...' oder gelb-gestreifte Dreiecke...

    Andreas
     
  5. chgs2013

    chgs2013 Aktiver Benutzer

    So wie es scheint, kann man mit meiner Abfrage nicht mehrere Lager usw. ausgeben.


    Wie kann ich denn zumindest meine Abfrage erweitern, dass mir cKommentar_1 mit dazu ausgegeben wird?
    Code:
    DECLARE @cName VARCHAR(1024)
    SELECT @cName = COALESCE(@cName  + '¶', '') + '['+tArt2.cArtNr + '] ' + tArt2.cName from tArtikel
    LEFT JOIN tStueckliste ON tStueckliste.kStueckliste = tArtikel.kStueckliste
    LEFT JOIN tArtikel AS tArt2 ON tArt2.kArtikel = tStueckliste.kArtikel
    WHERE tArtikel.cArtNr='"+VKS-RL180+"'
    SELECT cName = @cName
     
  6. ukulele

    ukulele Datenbank-Guru

    Du musst dir erstmal darüber klar werden dass du in einem Select immer nur eine Zeile pro Artikel ausgeben kannst. Wenn du nun beliebig viele Lagerplätze dazu anzeigen möchtest, ist der einfachste Weg den Artikel mehrfach auszugeben oder nur den ersten Lagerplatz. Mehrere Lagerplätze in einer Zeile geht auch, ist aber sehr sehr aufwendig. Genauso Zeilen, die vorne keine Informationen haben wie in deinem Beispiel.

    Kannst du in List&Label mehrere Unterabfragen einbauen oder verarbeitet das wirklich nur einen Select? Ich nutze nur Combit CRM, hatte mit L&L noch nicht das Vergnügen.
     
  7. chgs2013

    chgs2013 Aktiver Benutzer

    ... ich baue gerne vorab im Editor MS SQL Management Studio meine Abfragen auf, suche hier eben nach den Identnummer, hier werden mir komischerweise ja alle Zeilen ausgegeben, was im L&L nicht klappt (was ich nicht kapiere).
     
  8. ukulele

    ukulele Datenbank-Guru

    Dann ist das vermutlich so ähnlich wie die Filter im CRM. Dort baut man auch nur einen SQL Select auf die SID und die Ausgabe der Spalten ist dann Sache der Ansicht / des Containers etc. In sofern wirst du vermutlich in SQL eine Sicht anlegen müssen und deinem List & Label diese dann präsentieren müssen (Im CRM müsste ich dafür eine eigene Maske mit eigenen Referenzen bauen, geht aber).
     
  9. chgs2013

    chgs2013 Aktiver Benutzer

    ok, wenn das nicht anders machbar ist, wird sich das wohl erübrigt haben ...

    L&L ist in einer Software als Vorlagendesigner implementiert ...
     
  10. ukulele

    ukulele Datenbank-Guru

    Möglich ist das schon wenn du einen funktionierenden Select hast kannst du den zumindest immer per Sicht nutzen. Ich verstehe allerdings dein Datenmodell und deine Abfragen noch nicht so ganz. Wiso deklarierst du immer eine Variable?
     
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