none
Daten welche keinen Relation haben bei einem Update anzeigen lassen. RRS feed

  • Frage

  • Hallo zusammen.

    Ich habe einen Update für einen Kunden mit über 900 Kontakten gemacht. (aus einer Excel Liste)

    Nun haben wir abgemacht, dass ich die Kontakte, welche nicht migriert werden konnten (nicht eindeutig Identifiziert), in dem Excel vermerke.

    Mein Problem im moment ist, da es keine eindeutige Identifizierung gibt (nur über Namen), funktioniert das natürlich nicht so einfach.

    Gibt es eine Möglichkeit, Daten welche beim Update keine Relation hatten/haben, in eine zweite Tabelle anzeigen zu lassen?

     

    Ich Danke für jede Hilfe.

    Patrick Schaffner

    Donnerstag, 19. Mai 2011 13:38

Antworten

  • Hallo Patrick,
     
    schau Dir  MERGE (T-SQL) an.
     
    Ich würde die neuen Daten in eine neue Tabelle mit der Spalte „Aktualisierbar“ importieren, eindeutig identifizierbare Datenzeilen ermitteln und als aktualisierbar markieren. Anschließend die Tabelle exportieren und zurück an Kunden schicken.
     
    Hier ist ein Beispiel:
     
    use tempdb
    go
    
    create table CustomerFromExcel
    (
    	FirstName varchar(55),
    	LastName varchar(55),
    	Updatable bit default 0,
    )
    go
    
    create table Customer
    (
    	FirstName varchar(55),
    	LastName varchar(55)	
    )
    go
    
    insert into CustomerFromExcel
    (FirstName, LastName) values
    ('111','111'),('111','111'),
    ('222','222'),('333','333'),
    ('555','555')
    go
    
    insert into Customer
    (FirstName, LastName) values
    ('111','111'),
    ('222','222'),('222','222'),
    ('333','333'),('444','444')
    go
    
    ;with t1 as
    (
    	select
    		e.FirstName,
    		e.LastName
    	from
    		CustomerFromExcel e inner join Customer c
    		on e.FirstName = c.FirstName
    		and e.LastName = c.LastName
    	group by
    		e.FirstName, e.LastName
    	having
    		count(*) = 1
    )
    update
    	CustomerFromExcel
    set
    	Updatable = 1
    where
    	exists
    	(
    		select
    			*
    		from
    			t1
    		where
    			t1.FirstName = CustomerFromExcel.FirstName 
    			and t1.LastName = CustomerFromExcel.LastName
    	)
    go
    
    select * from CustomerFromExcel
    go
    
    drop table CustomerFromExcel, Customer
    go
    

    • Als Antwort markiert MaySa89 Freitag, 20. Mai 2011 08:57
    Donnerstag, 19. Mai 2011 20:58

Alle Antworten

  • hi,

    vom rein theoretischen Standpunkt aus gesehen: Nein, da sich die Daten geändert haben können. Ansonsten kommt es darauf an, wie du dieses Update gemacht hast...


    Microsoft MVP Office Access
    https://mvp.support.microsoft.com/profile/Stefan.Hoffmann
    Donnerstag, 19. Mai 2011 13:53
    Moderator
  • Hallo Patrick,
     
    schau Dir  MERGE (T-SQL) an.
     
    Ich würde die neuen Daten in eine neue Tabelle mit der Spalte „Aktualisierbar“ importieren, eindeutig identifizierbare Datenzeilen ermitteln und als aktualisierbar markieren. Anschließend die Tabelle exportieren und zurück an Kunden schicken.
     
    Hier ist ein Beispiel:
     
    use tempdb
    go
    
    create table CustomerFromExcel
    (
    	FirstName varchar(55),
    	LastName varchar(55),
    	Updatable bit default 0,
    )
    go
    
    create table Customer
    (
    	FirstName varchar(55),
    	LastName varchar(55)	
    )
    go
    
    insert into CustomerFromExcel
    (FirstName, LastName) values
    ('111','111'),('111','111'),
    ('222','222'),('333','333'),
    ('555','555')
    go
    
    insert into Customer
    (FirstName, LastName) values
    ('111','111'),
    ('222','222'),('222','222'),
    ('333','333'),('444','444')
    go
    
    ;with t1 as
    (
    	select
    		e.FirstName,
    		e.LastName
    	from
    		CustomerFromExcel e inner join Customer c
    		on e.FirstName = c.FirstName
    		and e.LastName = c.LastName
    	group by
    		e.FirstName, e.LastName
    	having
    		count(*) = 1
    )
    update
    	CustomerFromExcel
    set
    	Updatable = 1
    where
    	exists
    	(
    		select
    			*
    		from
    			t1
    		where
    			t1.FirstName = CustomerFromExcel.FirstName 
    			and t1.LastName = CustomerFromExcel.LastName
    	)
    go
    
    select * from CustomerFromExcel
    go
    
    drop table CustomerFromExcel, Customer
    go
    

    • Als Antwort markiert MaySa89 Freitag, 20. Mai 2011 08:57
    Donnerstag, 19. Mai 2011 20:58
  • Ok, das hört sich schon einmal gut an..
    Jedoch befürchte ich ein anderes Problem..

     

    Ich habe eine Tabelle Adresse.. Dort ist jeder Kunde von meinem Programm registriert. Jetzt hat eben diese Firma XX ihre Adressen von Ihrem Programm acuh dort erfasst.. Das heisst zum Beispiel:

     

    Es gibt einen Müller Hans. Dieser arbeitet bei der Firma XX und wird migriert.. Anhand vom Namen, welcher nicht zu 100% identifiziert ist, da es ja auch noch einen Müller Hans von meinem Programm gespeichert haben könnte, wird dieser dann anhand eines Eintrages mit einer Konto Nr. identifiziert. Jedoch diese Konto Nr. wird später durch eine Portfolio/Depot Nr. ersetzt.. von den 900 Adressen, können so ca. 700 identifiziert werden. Bei den anderen sind diese noch nicht erfasst, nicht vorhanden, da sie keine Konto Nr. hatten. Und genau diese welche noch nicht erfasst sind, möchte ich herausfiltern. Alternativ könnte ich natürlich die Daten von Hand in eine Excel tabelle kopieren, welche erfasst wurden und vergleichen. Das dauert aber ziemlich lange..

     

    Somit kann ich ja die Daten eigentlich gar nicht vergleichen oder hab ich jetzt etwas falsches im Kopf?

     

    Freundliche Grüsse,

    Patrick Schaffner

    Freitag, 20. Mai 2011 08:26
  • hi,

    Ich habe eine Tabelle Adresse.. Dort ist jeder Kunde von meinem Programm registriert. Jetzt hat eben diese Firma XX ihre Adressen von Ihrem Programm acuh dort erfasst..

    Also sind die zu vergleichenden Daten schon in ein- und derselben Tabelle  gespeichert?

    Es gibt einen Müller Hans. Dieser arbeitet bei der Firma XX und wird migriert..

    Was soll "migriert" hier bedeuten?

    Anhand vom Namen, welcher nicht zu 100% identifiziert ist, da es ja auch noch einen Müller Hans von meinem Programm gespeichert haben könnte, wird dieser dann anhand eines Eintrages mit einer Konto Nr. identifiziert. [..] nicht vorhanden, da sie keine Konto Nr.

    Was nun, sind sie nun in der Tabelle gespeicher oder nicht? Außerdem liest es ich wie eine simples

    SELECT *
    FROM   deinerTabelle
    WHERE  KontoNr IS NULL ;

    Kannst du es bitte etwas klarer, präziser Ausdrücken?


    Microsoft MVP Office Access
    https://mvp.support.microsoft.com/profile/Stefan.Hoffmann
    Freitag, 20. Mai 2011 08:32
    Moderator
  • Hat sich mit dem Merge erledigt.. :)

    Danke trotzdem.. hatte einen kleinen Fehler in der Syntax.

     

    Schönen Tag wünsch ich Euch.

    Freitag, 20. Mai 2011 08:56