2012-04-10 16 views
9

In T-SQL, posso eseguire l'aritmetica come parte di una selezione. Ad esempio, supponiamo di avere una tabella Math con una colonna denominata Decimal. Posso fare la seguente domanda.Come si esegue una semplice mappatura delle stringhe come parte di una selezione t-sql?

SELECT 100*Decimal FROM Math 

Mi chiedo se è anche possibile fare logica nel scegliere dove creo una mappatura come ad esempio { A => B, F => Z} in modo che ogni volta che la colonna è una, restituisce B e ogni volta che la colonna è F, restituisce Z.

Mi scuso se questa è una domanda newb, perché non ho molta esperienza in SQL.

risposta

13

penso che si desidera utilizzare il CASE espressione:

SELECT 
    CASE column1 
    when 'A' THEN 'B' 
    when 'F' THEN 'Z' 
    END 
FROM Tbl 

Si noti inoltre che ci sono due sintassi differenti per esso, scegliere quello che è più appropriato per voi.

+0

Tutte e tre le risposte sono state utili, ma questo risolto il problema implicito il migliore, e apprezzo il link alla documentazione. Non sapevo dell'esistenza dell'istruzione CASE in SQL finché non l'ho visto. – merlin2011

2
SELECT CASE WHEN YourColumn = 'A' THEN 'B' 
      WHEN YourColumn = 'F' THEN 'Z' 
      ELSE YourColumn 
     END AS MappedColumn 
    FROM YourTable 
6

È possibile creare una variabile di tabella con due colonne, una per ciò che viene mappato e un'altra per quello a cui è associata. Quindi basta unirsi a quella variabile di tabella sulla colonna che si desidera rimappare.

Le istruzioni CASE funzionano perfettamente per un numero limitato di confronti, ma se si desidera eseguire molti remapping, la variabile di tabella potrebbe essere l'opzione migliore.

qualcosa di simile ...

DECLARE @Mappings TABLE 
(
    MapFrom VARCHAR(50), 
    MapTo VARCHAR(50) 
) 

insert into @Mappings values 
('A', 'B'), 
('F', 'Z'), 
('other', 'mappings'); 


select m.MapTo 
from yourTable t 
inner join @Mappings m on m.MapFrom = t.columnName 
+0

Un altro vantaggio dell'approccio a tabelle variabili è che se è necessario mappare più colonne o mappare più volte su query diverse in una stored procedure, rimane pulito senza duplicare l'istruzione case. –

Problemi correlati