Werte "auffüllen"

ukulele

Datenbank-Guru
Beiträge
5.165
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:
pk fk wert typ1 typ2
8677933D-6EBA-41AA-9E9E-5341B40BC538 EAB3AF42-2C43-499A-83C1-BE358F9AFD8B wu E-Mail 2 E-Mail
A1438F87-131F-47B7-AC78-660A90823B6E EAB3AF42-2C43-499A-83C1-BE358F9AFD8B test NULL E-Mail
1D700A86-FE33-4B06-BFE8-6AD2EF419CF4 EAB3AF42-2C43-499A-83C1-BE358F9AFD8B qwerty E-Mail E-Mail
16270601-8186-4918-94B4-793FC22DAF92 1390A440-57F7-4663-98BF-CB6C5C99BBF8 asdf2 NULL E-Mail
56F5A2D9-A74D-4DBA-BAD7-7B9FC4AEA6AA EAB3AF42-2C43-499A-83C1-BE358F9AFD8B wusa E-Mail 2 E-Mail
AEAB2594-55D1-49DC-8C84-9BDFC2B57321 EAB3AF42-2C43-499A-83C1-BE358F9AFD8B asdf NULL E-Mail
FC8574FA-29DB-4AF2-B569-BADC2300FB73 EAB3AF42-2C43-499A-83C1-BE358F9AFD8B qwert E-Mail 3 E-Mail
3002484A-D615-435E-B77E-E746BA15DADF EAB3AF42-2C43-499A-83C1-BE358F9AFD8B wattu NULL E-Mail
Soll:
fk typ_email1 typ_email2 typ_email3
EAB3AF42-2C43-499A-83C1-BE358F9AFD8B qwerty wu qwert
EAB3AF42-2C43-499A-83C1-BE358F9AFD8B asdf wusa test
1390A440-57F7-4663-98BF-CB6C5C99BBF8 asdf2 NULL NULL
 
Werbung:
Zurück
Oben