2013-05-01 13 views
5

Ho una tabella simile alla seguente:SQL query: creare categoria colonna basata su una colonna varchar nella tabella contenente i valori specifici

Date  Description  Value1 Value2 
01/01/2012 shiny colour 2  0  
01/01/2012 yellow colour 2  2  
03/01/2012 matt colour  2  2  
03/01/2012 matt   4  1 
03/01/2012 shiny   2  2 

Voglio scrivere una query SQL SELECT (T-SQL) che sarà restituisce tutte le colonne precedenti ma visualizza anche una colonna aggiuntiva come output dell'istruzione SELECT il cui valore dipende dalla presenza della parola "colore" nella descrizione (se "colore" è presente, sarebbe un valore, se non lo è mostrerebbe un valore diverso).

(Vorrei anche visualizzare un'altra colonna aggiuntiva in cima a quella il cui valore dipende dalla presenza delle parole "matt" o "lucido" nella colonna Descrizione. Ma presumo che il metodo per farlo sarebbe simile).

Credo che dovrei essere in grado di farlo utilizzando la funzione COALESCE, ma non ho familiarità con questo e sto lottando per ottenere qualcosa di funzionamento?

ESTENSIONE

Hey, grazie per le vostre risposte. Sono davvero d'aiuto. Ho un'altra estensione alla domanda. La mia seconda colonna generata si basa sulle informazioni nella prima colonna generata. Quindi, qualcosa di simile a:

SELECT *, 
CASE 
    WHEN Description LIKE '%colour%' THEN 'SomeValue' 
    ELSE 'Unclassified' 
END AS Category1, 
CASE 
    WHEN AnotherColumn LIKE 'Something' THEN 'SomeValue' 
    WHEN Category1='Unclassified' THEN 'Unclassified' 
    ELSE 'Generic' 
END AS Category2 
FROM table_name 

Come faccio a ottenere l'output di Categoria2 fare affidamento sulla potenza di Categoria1? Sto provando qualcosa come sopra ma non funziona.

mia domanda di estensione è stato risposto qui:T-SQL CASE statement relies on another CASE statement in same SELECT query

risposta

2
SELECT *, 
     CASE WHEN Description LIKE '%colour%' THEN 
      1 
     ELSE 
      0 
     END AS HasColour, 
     CASE WHEN Description LIKE '%matt%' THEN 
      1 
     ELSE 
      0 
     END AS HasMatt, 
     CASE WHEN Description LIKE '%shiny%' THEN 
      1 
     ELSE 
      0 
     END AS HasShiny 
FROM table_name 

si sarebbe solo aggiungere ulteriori colonne per tutte le parole diverse che si desidera cercare. Ovviamente puoi cambiare il tipo di ritorno delle colonne con quello che vuoi, ma ho pensato che un booleano sarebbe stato adatto in questa situazione.

0

A meno che non mi fraintendere ciò che si sta chiedendo, è possibile utilizzare un'istruzione case:

SELECT Date, 
Description, 
Value1, 
Value2, 
Case when Description like '%colour%' then OTHERCOL else OTHERCOL2 end as Colourful, 
Case when Description like '%matt%' then OTHERCOL else OTHERCOL2 end as Matt, 
Case when Description like '%shiny%' then OTHERCOL else OTHERCOL2 end as Shiny, 
FROM yourTable 
+0

Perfetto grazie! – Katie

Problemi correlati