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

2 Spalten Zusammenfügen

Dieses Thema im Forum "Microsoft Access" wurde erstellt von Gullien, 12 August 2014.

  1. Gullien

    Gullien Benutzer

    Hallo Zusammen,

    habe eine SQL Anweisung. Funktioniert auch super alles. Das einzige was mich stört und ich nicht lösen kann ist, dass beim Zusammenführen von 4 Spalten in 2 er mir bei leeren Spalten noch ein / einfügt.

    Abbildung vor Abfrage:
    Vor Abfrage.PNG

    Und nach Abfrage
    nach Abfrage.PNG

    So nun möchte ich aber dass ich kein / habe sondern Wenn kein Jahr angegeben ist da auch nichts steht.

    Hier noch mein Abfrage dazu:
    SELECT Make, Model, Modellvariant, [From/Month] & '/ ' & [From/Year] AS Von, [To/Month] & '/ ' & [To/Year] AS Bis, [OE part number], [Most Recent Interchange Part], [OE Change part 1], [OE Change part 2], [Intellisens C4], [Intellisens S4], RDE, Frequency
    FROM [Europa Struktur]
    WHERE (NOT([Intellisens C4] IS NULL)) OR (NOT([Intellisens S4] IS NULL)) OR (NOT(RDE IS NULL));

    Hoffe das ist nichts komplexes.
    Vielen Dank im Voraus
     
  2. ukulele

    ukulele Datenbank-Guru

    In MSSQL würde man das mit einer CASE Schleife im Select Teil lösen, in etwa so:
    Code:
    [From/Month] & ( CASE WHEN [From/Month] IS NOT NULL AND [From/Year] IS NOT NULL THEN '/' ELSE '' END ) & [From/Year] AS Von
    Eventuell musst du auf [From/Month] = '' prüfen, ich bin mir nicht sicher wie sich das mit NULL in Access verhält. Aber im Wesentlichen sollte es genauso laufen.
     
  3. Gullien

    Gullien Benutzer

    Hmm also mit der Formel so klappt das nicht bekomme da eine Fehlermeldung "Syntaxfehler".
    Habs auch nur eingefügt ehrlich gesagt, da ich nicht weiss wie sonst.

    SELECT Make, Model, Modellvariant, [From/Month] & ( CASE WHEN [From/Month] IS NOT NULL AND [From/Year] IS NOT NULL THEN '/' ELSE '' END ) & [From/Year] AS Von, [To/Month] & '/ ' & [To/Year] AS Bis, [OE part number], [Most Recent Interchange Part], [OE Change part 1], [OE Change part 2], [Intellisens C4], [Intellisens S4], RDE, Frequency
    FROM [Europa Struktur]
    WHERE (NOT([Intellisens C4] IS NULL)) OR (NOT([Intellisens S4] IS NULL)) OR (NOT(RDE IS NULL));
     
  4. ukulele

    ukulele Datenbank-Guru

  5. Gullien

    Gullien Benutzer

    Bin aus deinem Link nicht schlau geworden. Kannst dus mir vllt bitte in mein code einbauen, wenn es für dich verständlich ist.

    Ansonsten muss ich immer die / händisch rauslöschen
     
  6. ukulele

    ukulele Datenbank-Guru

    Ich hab kein Access zum testen und weiss nicht ob es auf NOT NULL vernünftig prüfen kann oder ob die Spalte in Access einfach nur als leer behandelt wird. Ich weiss auch nicht ob AND innerhalb von IIf geht, ich kann nur raten:
    Code:
    SELECT    Make,
            Model,
            Modellvariant,
            [From/Month] +
            IIf([From/Month] IS NOT NULL AND [From/Year] IS NOT NULL,'/','') +
            [From/Year] AS Von,
            [To/Month] +
            IIf([To/Month] IS NOT NULL AND [To/Year] IS NOT NULL,'/','') +
            [To/Year] AS Bis,
            [OE part number],
            [Most Recent Interchange Part],
            [OE Change part 1],
            [OE Change part 2],
            [Intellisens C4],
            [Intellisens S4],
            RDE,
            Frequency
    FROM    [Europa Struktur]
    WHERE    [Intellisens C4] IS NOT NULL
    OR        [Intellisens S4] IS NOT NULL
    OR        RDE IS NOT NULL; 
    Den Rest musst du schon selbst versuchen.
     
  7. Gullien

    Gullien Benutzer

    Super vielen vielen Dank. Hat soweit funktioniert dass er mit keine "/" reinmacht. Nur ist es jetzt so, dass er bei einem Eintrag nur von der Jahreszahlt dies gar nicht mehr anzeigt. Also nur wenn ein Monat und Jahr angegeben ist fügt er die zusammen sonst bekomme ich leere Felder.
    Habe dann statt AND bei der If Anweisung OR reingemacht geht aber leider auch nicht. Bin am probieren.
    Danke dir sehr für deine Hilfe!
     
  8. Gullien

    Gullien Benutzer

    Ich weiss nun woran es liegt aber kann die Formel nicht so hinbiegen. Du hast ja in deiner Formel es so definiert, dass nur ein / gesetzt wird wenn beide Felder nicht leer sind. Es gibt ja aber auch felder die nur einer Jahreszahl haben also nur die eine Spalte befüllt ist und genau diese sollen so übernommen werden ohne ein / davor zu setzen. In deiner Formel lässt er diese Feldet komplett weg, da du prüfst ob die Spalte leer ist oder nicht. und nur wenn beide befüllt sind übernimmt er die.
     
  9. ukulele

    ukulele Datenbank-Guru

    In meiner Formel wird der / nur gesetzt, wenn es sowohl Jahr als auch Monat gibt. Wenn es nur Jahr oder Monat gibt, brauchst du ja auch keinen Strich sondern eben nur Jahr oder Monat. Das Problem besteht an anderer Stelle: Ein beliebiger NULL Wert in deiner Zeichenkette läßt die ganze Kette NULL werden. Also NULL * 'asdf' = NULL und das trifft dann vermutlich auf Month oder Year zu.
    Code:
    SELECT    Make,
            Model,
            Modellvariant,
            IIf([From/Month] IS NOT NULL,[From/Month],'') +
            IIf([From/Month] IS NOT NULL AND [From/Year] IS NOT NULL,'/','') +
            IIf([From/Year] IS NOT NULL,[From/Year],'') AS Von,
            IIf([To/Month] IS NOT NULL,[To/Month],'') +
            IIf([To/Month] IS NOT NULL AND [To/Year] IS NOT NULL,'/','') +
            IIf([To/Year] IS NOT NULL,[To/Year],'') AS Bis,
            [OE part number],
            [Most Recent Interchange Part],
            [OE Change part 1],
            [OE Change part 2],
            [Intellisens C4],
            [Intellisens S4],
            RDE,
            Frequency
    FROM    [Europa Struktur]
    WHERE    [Intellisens C4] IS NOT NULL
    OR        [Intellisens S4] IS NOT NULL
    OR        RDE IS NOT NULL; 
     
  10. Gullien

    Gullien Benutzer

    Ohje darauf wäre ich echt nicht gekommen.
    Und bin super glücklich. Es klappt.
    Danke dir nochmals so sehr. Hast durch deine Unterstüzung eine Menge an Aufwand für mich gelöst.:)
     
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