2011-11-29 13 views
5

Ho cercato una soluzione, ma non hanno ancora trovato uno che funziona ...accesso query di aggiornamento di SQL più valori

Sto cercando di aggiornare i valori multipli in una colonna sulla base di valori distinti in un'altra colonna . Per esempio:

If status = F05 then statusID = 987 
If status = F12 then statusID = 12957 

Ho provato questo senza successo:

UPDATE myTable 
SET statusID = CASE status 
    WHEN 'F05' THEN 987 
    WHEN 'F12' THEN 12957 
END 

Ci sono migliaia di persone che devono essere aggiornate in modo, ovviamente, mi piacerebbe eseguire questo in una sola query di aggiornamento.

Cosa mi manca? Che cosa sto facendo di sbagliato?

Grazie!

+2

I suoi 'sguardi di query UPDATE' bene. Descrivi "Ho provato questo senza successo". Quello che è successo? –

+1

CASE può essere utilizzato solo in VBA, non in una query MS Access. –

risposta

7

In accesso è possibile utilizzare la funzione SWITCH. L'istruzione CASE non funziona.

UPDATE myTable 
SET statusID = 
SWITCH 
    ([status] = 'F05', 987, 
    [status] = 'F12', 12957) 

Tuttavia, se si dispone di troppi elementi che si potrebbe desiderare di creare una tabella di mappatura che è dati assomiglia

OldStatus | NewStatus 
--------------------- 
F05  | 987 
F12  | 12957 

E poi eseguire le seguenti

UPDATE 
     myTable 
     INNER JOIN Mapping ON myTable.Status = Mapping.OldStatus 
SET 
     myTable.Status = Mapping.NewStatus; 
+0

Brillante! Grazie! –

+0

Funziona molto bene. Ho esportato la tabella, ho usato Excel per concatenare i campi nel formato del codice e riportato come mia richiesta di aggiornamento. Che enorme risparmio di tempo! Grazie per questo regalo! ~ kern –

+0

Oh no ... :) SWITCH ha funzionato benissimo per il mio primo set, tuttavia dà un errore "espressione troppo complessa" se uso più di 15 articoli ... Come posso eseguire questo in massa? –

Problemi correlati