Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

SQL Wenn 0 dann nächste Spalte

Begonnen von Vertigo, Juli 16, 2019, 15:43:31

⏪ vorheriges - nächstes ⏩

Vertigo

Moin,

also ich möchte eigentlich nur, dass er unter "Betrieb" die richtige Untergruppe auswählt.

Es gibt 5 Unterorganisationen, aber manche Mitarbeiter haben nur bis zur 3. ihren Betrieb und andere haben ihren erst in der 5.

Bsp:
MA1:
Org1: 123
Org2: 234
Org3: 345
Org4: ----
Org5: ----

MA2:
Org1: 123
Org2: 234
Org3: 345
Org4: 456
Org5: 567

In der Tabelle am Ende soll dann stehen:
MA1
Betrieb: 345

MA2
Betrieb: 567


Mein Code sieht so aus:

    strSql = "INSERT INTO TblAlleMitarbeiter" _
        & " ( MANachname, MAVorname, MAGebDat, MAPersNr, MABetrieb )" _
        & " SELECT DISTINCT TblMitarbeiter.Name, TblMitarbeiter.Vorname, TblMitarbeiter.Geburtsdatum, TblMitarbeiter.Personalnummer, IFNULL(TblMitarbeiter.[Organisationseinheit 5],TblMitarbeiter.[Organisationseinheit 4],TblMitarbeiter.[Organisationseinheit 3],TblMitarbeiter.[Organisationseinheit 2])" _
        & " FROM TblMitarbeiter" _
        & " WHERE (TblMitarbeiter.Personalnummer) IS NOT NULL;"


Was leider nicht klappt, hat da jemand eine Idee?

Danke & einen schönen Tag wünsche ich.

PhilS

Zitat von: Vertigo am Juli 16, 2019, 15:43:31
Mein Code sieht so aus:

    strSql = "INSERT INTO TblAlleMitarbeiter" _
        & " ( MANachname, MAVorname, MAGebDat, MAPersNr, MABetrieb )" _
        & " SELECT DISTINCT TblMitarbeiter.Name, TblMitarbeiter.Vorname, TblMitarbeiter.Geburtsdatum, TblMitarbeiter.Personalnummer, IFNULL(TblMitarbeiter.[Organisationseinheit 5],TblMitarbeiter.[Organisationseinheit 4],TblMitarbeiter.[Organisationseinheit 3],TblMitarbeiter.[Organisationseinheit 2])" _
        & " FROM TblMitarbeiter" _
        & " WHERE (TblMitarbeiter.Personalnummer) IS NOT NULL;"
1.)
Dein Datenmodell ist an dieser Stelle nicht so ideal aufgebaut.
2.)
IFNULL erwartet nur zwei Argumente. Du musst also die Funktionsaufrufe entsprechend schachteln, dass es funktioniert.
Oder du verwendest die Coalesce-Funktion.
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

Vertigo

Zitat von: PhilS am Juli 16, 2019, 16:08:55
Zitat von: Vertigo am Juli 16, 2019, 15:43:31
Mein Code sieht so aus:

    strSql = "INSERT INTO TblAlleMitarbeiter" _
        & " ( MANachname, MAVorname, MAGebDat, MAPersNr, MABetrieb )" _
        & " SELECT DISTINCT TblMitarbeiter.Name, TblMitarbeiter.Vorname, TblMitarbeiter.Geburtsdatum, TblMitarbeiter.Personalnummer, IFNULL(TblMitarbeiter.[Organisationseinheit 5],TblMitarbeiter.[Organisationseinheit 4],TblMitarbeiter.[Organisationseinheit 3],TblMitarbeiter.[Organisationseinheit 2])" _
        & " FROM TblMitarbeiter" _
        & " WHERE (TblMitarbeiter.Personalnummer) IS NOT NULL;"
1.)
Dein Datenmodell ist an dieser Stelle nicht so ideal aufgebaut.
2.)
IFNULL erwartet nur zwei Argumente. Du musst also die Funktionsaufrufe entsprechend schachteln, dass es funktioniert.
Oder du verwendest die Coalesce-Funktion.


1.) Wie meinst du das?

2.) COALESCE ist exakt was ich suche. Funktioniert nur leider auch nicht.

PhilS

Zitat von: Vertigo am Juli 16, 2019, 16:12:39
1.) Wie meinst du das?
Deine Tabellenstruktur verstößt gegen die 1.Normalform.

Zitat von: Vertigo am Juli 16, 2019, 16:12:392.) COALESCE ist exakt was ich suche. Funktioniert nur leider auch nicht.
"Funktioniert leider nicht" - Hilft leider nicht bei der Fehlersuche.
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

Vertigo

Zitat von: PhilS am Juli 16, 2019, 16:32:35
Deine Tabellenstruktur verstößt gegen die 1.Normalform.

Das denke ich nicht, weil das eine hierarchische Struktur der Org-Einheiten ist.


Zitat von: PhilS am Juli 16, 2019, 16:32:35
"Funktioniert leider nicht" - Hilft leider nicht bei der Fehlersuche.
Das ist korrekt. Das war unklug.

Er gibt zurück, dass 'Coalesce' eine undefinierte Funktion im Ausdruck ist.

Ich habe nur das 'IFNULL' mit einem 'COALESCE' ersetzt.


PhilS

Zitat von: Vertigo am Juli 16, 2019, 17:37:56
Das denke ich nicht, weil das eine hierarchische Struktur der Org-Einheiten ist.
Eine Sonderregelung für hierarchische Strukturen von Org-Einheiten ist mir im Rahmen der Normalisierungsregeln nicht bekannt. ;-)

Zitat von: Vertigo am Juli 16, 2019, 17:37:56
Er gibt zurück, dass 'Coalesce' eine undefinierte Funktion im Ausdruck ist.

Ich habe nur das 'IFNULL' mit einem 'COALESCE' ersetzt.
Die Abfrage wird so aber schon direkt von einem MySQL-Server verarbeitet, oder? - Die Wahl des Boards "MySQL" für die Frage und die Verwendung der IFNULL-Funktion legte diese Annahme nahe.

"undefinierte Funktion im Ausdruck" hört sich aber sehr nach einer Access-Fehlermeldung an.Wenn die Abfragen in Access ausgeführt werden soll, gibt es die Coalesce-Funktion tatsächlich nicht. Dann musst du entweder die NZ-Funktion (analog zu IFNULL) schachteln, oder dir eine Alternative für Coalesce in VBA programmieren.
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor