2013-09-30 17 views
20

Ho una tabella che sembra qualcosa di simile:SQL Server - Aggiornamento colonna dai dati nella stessa tabella

SetId  ID  Premium 
2012  5   Y 
2012  6   Y 
2013  5   N 
2013  6   N 

voglio aggiornare i 2013 record con i valori premium dove il setId uguale 2012.

Così, dopo l'interrogazione sarebbe simile a questa:

SetId  ID  Premium 
2012  5   Y 
2012  6   Y 
2013  5   Y 
2013  6   Y 

Qualsiasi aiuto molto apprezzato

+0

'la scritture 2013 - chiarire questa parte. È memorizzato da qualche parte nel tuo DB? o è solo un'altra spiegazione della colonna 'SetId'? – Nogard

+0

@dawsonz: qual è il risultato atteso, se "il primo record del premio 2012 è 'N'"? –

+0

Voglio copiare la colonna Premium dove l'ID è lo stesso da quelli con il 2012 a quelli con il 2013. – dawsonz

risposta

29

Non è chiaro quali 2.012 valore che si desidera utilizzare per aggiornare cui 2.013 valore, ho ipotizzato che il ID dovrebbe essere lo stesso.

Esempio completo che utilizza le variabili di tabella che è possibile testare nello studio di gestione.

DECLARE @Tbl TABLE (
    SetId INT, 
    Id INT, 
    Premium VARCHAR(1) 
) 

INSERT INTO @Tbl VALUES (2012, 5, 'Y') 
INSERT INTO @Tbl VALUES (2012, 6, 'Y') 
INSERT INTO @Tbl VALUES (2013, 5, 'N') 
INSERT INTO @Tbl VALUES (2013, 6, 'N') 

--Before Update 
SELECT * FROM @Tbl 

--Something like this is what you need 
UPDATE t 
SET t.Premium = t2.Premium 
FROM @Tbl t 
INNER JOIN @Tbl t2 ON t.Id = t2.Id 
WHERE t2.SetId = 2012 AND t.SetId = 2013 

--After Update  
SELECT * FROM @Tbl 
+1

grazie chris l'esempio è stato molto utile per giocare. –

10
UPDATE t 
SET t.Premium = (SELECT TOP 1 t2.Premium 
       FROM dbo.TableName t2 
       WHERE t2.SetId = 2012) 
FROM dbo.TableName t 
WHERE t.SetId = 2013 

Demonstration

7

credo che questo sia soluzione corretta:

UPDATE t 
SET t.Premium = (SELECT TOP 1 t2.Premium 
       FROM dbo.TableName t2 
       WHERE t2.SetId = 2012 AND t2.Id = t.ID) 
FROM dbo.TableName t 
WHERE t.SetId = 2013 
+1

Ottimo punto Chris, l'ho appena testato e capito, grazie. – dawsonz

+0

Oops, cancellato il commento. Dovresti notare la sottile differenza tra questa risposta e la mia in quanto, se non c'è una voce corrispondente con 'SetId = 2012' e lo stesso' ID', tenterà di aggiornare il 't.Premium' a' NULL', che potrebbe non riuscire a seconda dello schema della tabella e se la colonna consente valori nulli. –

2

Siamo in grado di aggiornare la tabella dalla tabella di sé, in questo modo:

update TABLE_A 
    set TABLE_A.Col1=B.Col2 
    from TABLE_A B 
Problemi correlati