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

Werte "auffüllen"

Dieses Thema im Forum "Microsoft SQL Server" wurde erstellt von ukulele, 27 Oktober 2015.

  1. ukulele

    ukulele Datenbank-Guru

    Ich bastel grade mal wieder an meiner Outlook Synchronisation. Jetzt habe ich eine Situation die ich gerne elegant lösen möchte, an der ich mich aber regelmäßig verhaspel. Hier mal das Problem vereinfacht.

    Meine Ausgangstabelle hat einen typ2, der mir sagt das es sich um eine E-Mail Adresse handelt. Outlook hat drei Felder für E-Mail Adresssen die alle mit ihrem Wert und typ2='E-Mail' genutzt werden dürfen. Wenn allerdings manuell ein Zielfeld im typ1 vorgegeben wurde, dann muss das vorranig belegt und die Lücken mit den übrigen Werten bestückt werden.

    Klingt erstmal nach einem klassischen ROW_NUMBER() mit PARTITION BY-Problem. Das kriege ich auch hin solange ich nur die Felder 1 bis 3 hochzählen muss um dann wieder bei 1 anzufangen, den Rest erledigen dann Joins. Jetzt liegen aber die manuell gesetzten Werte dazwischen und müssen übersprungen werden. Da krieg ich irgendwie nen Knoten im Kopf und vieleicht möchte sich noch jemand die Fingerübung antun.

    Code:
    CREATE TABLE test(
        pk UNIQUEIDENTIFIER NOT NULL PRIMARY KEY,
        fk UNIQUEIDENTIFIER NOT NULL,
        wert VARCHAR(20) NOT NULL,
        typ1 VARCHAR(10) NULL,
        typ2 VARCHAR(10) NOT NULL
        );
    
    INSERT INTO test VALUES(newid(),'EAB3AF42-2C43-499A-83C1-BE358F9AFD8B','test',NULL,'E-Mail');
    INSERT INTO test VALUES(newid(),'EAB3AF42-2C43-499A-83C1-BE358F9AFD8B','wusa','E-Mail 2','E-Mail');
    INSERT INTO test VALUES(newid(),'EAB3AF42-2C43-499A-83C1-BE358F9AFD8B','wu','E-Mail 2','E-Mail');
    INSERT INTO test VALUES(newid(),'EAB3AF42-2C43-499A-83C1-BE358F9AFD8B','wattu',NULL,'E-Mail');
    INSERT INTO test VALUES(newid(),'EAB3AF42-2C43-499A-83C1-BE358F9AFD8B','asdf',NULL,'E-Mail');
    INSERT INTO test VALUES(newid(),'EAB3AF42-2C43-499A-83C1-BE358F9AFD8B','qwert','E-Mail 3','E-Mail');
    INSERT INTO test VALUES(newid(),'EAB3AF42-2C43-499A-83C1-BE358F9AFD8B','qwerty','E-Mail','E-Mail');
    INSERT INTO test VALUES(newid(),'1390A440-57F7-4663-98BF-CB6C5C99BBF8','asdf2',NULL,'E-Mail');
    Ist:
    Soll:
     
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