2016-05-04 12 views
0

ich eine Tabelle, wie so haben:SQL eine Tabelle mit Zeilen in derselben Tabelle zu aktualisieren, jedoch mit unterschiedlichen Kriterien

business_positions 
id code description_1 description_2 

Aus irgendeinem Grund ist es falsch für die erste Hälfte der description_1 Spalte ausgefüllt aufgefüllt wird und die description_2 Spalte leer, und die zweite Hälfte ist das Gegenteil:

id |code|description_1|description_2 
900| 1|Senior Manager|(empty) 
901| 1|President|(empty) 
902| 1|Board Member|(empty) 
903| 2|Another Description|(empty) 
... 
2000| 1|(empty)|Desc 
2001| 1|(empty)|Desc2 
2002| 1|(empty)|Desc3 
2003| 2|(empty)|Desc4 
... 

ich möchte, die Tabelle aktualisieren, um sowohl die in der gleichen Zeile gefüllt Beschreibungen, Zeilen durch die code Feldabstimmung und Einsetzfolge respektieren (dh nicht so ng). Die ids sind immer einzigartig. Das Ergebnis, das ich habe, ist:

id |code|description_1|description_2 
900| 1|Senior Manager|Desc 
901| 1|President|Desc2 
902| 1|Board Member|Desc3 
903| 2|Another Description|Desc4 

und dann die zweite Hälfte mit IDs ab 2000 löschen.

Wie mache ich das?

dies ohne Glück versucht:

UPDATE 
    business_positions A 
LEFT JOIN business_positions B ON (A.code=B.code) 
SET 
    A.description_2 = B.description_2 
WHERE 
    A.description_2='' 
AND 
    B.description_2<>'' 
AND 
    A.id<>B.id 
+0

in description_2 Spalte müssen Sie nur Desc1, Desc 2 ....... richtig? –

+0

@FathahRehmanP Ja. – vulkanino

+0

Problem gelöst, überprüfe meine Antwort –

Antwort

0

dieses folgende Abfrage

;with CTE 
AS 
( 
    select description_2 from business_positions where description_1 = " " 
) 

update A 
Set description_2 = B.description_2 
FROM business_positions A 
INNER JOIN CTE B 
ON A.description_2 = " " 

DELETE business_positions 
where description_1 = " " 


select * From business_positions 
+0

Gibt es am Anfang einen Fehler? – vulkanino

+0

Welche Art von Fehler? Sie müssen einzelnes Anführungszeichen ('') anstelle von Anführungszeichen ("") ersetzen – Mohit

+0

Ich bekomme nicht die Syntax "; mit CTE", und die Abfrage funktioniert nicht. – vulkanino

1

Ausprobieren Verwenden

update business_positions t1 inner join business_positions t2 
on t2.id=t1.id+1100 
set t1.description_2=t2.description_2 

Dann unerwünschte Zeilen löschen mit folgenden Abfrage

delete from business_positions where id>1999; 
zu aktualisieren
+0

Nein, bitte lesen Sie noch einmal die Frage. Wenn ich die Zeilen vor dem Update lösche, habe ich keine Daten, um die Zeilen mit zu aktualisieren. – vulkanino

+0

@vulkanino - von Ihrer ersten Antwort dachte ich, Sie müssen nur Desc1, Desc2 einfügen .... –

+0

@vulkanino - Wie viele Zeilen in der ersten einfügen eingefügt? –

Verwandte Themen