2017-03-29 4 views
0

J'ai une table comme ci-dessous: actuellemise à jour mêmes lignes

Column1 Column2 column3 
    ------------------------- 
    abc  cat1  1 
    efg  cat1  3 
    hij  cat1  2 
    klm  cat2  1 
    nop  car2  2 
    qrs  cat2  3 

Je veux mettre à jour colonne1 où toutes les lignes correspondant à cat1 de lignes correspondant à cat2, en tenant compte des lignes seront mises à jour pour l'identification qui correspond à la colonne 3 ids

escomptés

Column1 Column2 column3 
------------------------- 
klm  cat1  1 
qrs  cat1  3 
nop  cat1  2 
klm  cat2  1 
nop  car2  2 
qrs  cat2  3 

+1

Pouvez-vous poster aussi le résultat attendu après la 'update' a eu lieu? –

+0

a mis à jour la question – SmartestVEGA

+0

S'il vous plaît lire vos exigences comme si vous n'avez aucune idée du problème et de penser à vous-même .... est-ce logique ?! Comme je n'ai aucune idée de ce que tu veux. Et les utilisateurs ne devraient pas avoir à lire des choses encore et encore et essayer de s'en sortir. Préciser. – Tanner

Répondre

1
Use below query : 

CREATE TABLE #Table (Column1 VARCHAR(100),Column2 VARCHAR(100), Column3  
VARCHAR(100)) 

INSERT INTO #Table (Column1 , Column2 , Column3 ) 
SELECT 'abc','cat1',1 UNION ALL 
SELECT 'efg','cat1',3 UNION ALL 
SELECT 'hij','cat1',2 UNION ALL 
SELECT 'klm','cat2',1 UNION ALL 
SELECT 'nop','cat2',2 UNION ALL 
SELECT 'qrs','cat2',3 


UPDATE #Table SET Column1 = A.Column1 
FROM 
(
    SELECT Column1 , Column3 
    FROM #Table 
    WHERE Column2 = 'cat2' 
)A WHERE #Table.Column2 = 'cat1' AND A.Column3 = #Table.Column3 

SELECT * FROM #Table 

http://rextester.com/QYHLTE44670

+0

@ SmartestVEGA, Est-dessus ci-dessus donnez votre résultat escompté ..? – Mansoor

0

S'il vous plaît essayer avec le code ci-dessous:

DECLARE @Table TABLE 
    (Column1 VARCHAR(100),Column2 VARCHAR(100), Column3 INT) 

    INSERT INTO @Table VALUES 
    ('abc','cat1',1), 
    ('efg','cat1',3), 
    ('hij','cat1',2), 
    ('klm','cat2',1), 
    ('nop','cat2',2), 
    ('qrs','cat2',3) 

    UPDATE 
    t 
    SET t.Column1 = d.Column1 
    FROM @Table t INNER JOIN @Table d 
    ON t.Column3 = d.Column3 
    WHERE d.Column2 ='cat2'