2012-08-07 10 views
5

Supponiamo che io sono un po 'di tabella in SQL Database con molti dati e alcune righe sono quasi identiche, ad esempio:Come scrivere una query che eseguirà una selezione distinta insolita dalla tabella sql?

|===========================================| 
|   Message       | 
|===========================================| 
|    ...       | 
|-------------------------------------------| 
| account is rejected: <aa>    | 
|-------------------------------------------| 
| account is rejected: <bb>    | 
|-------------------------------------------| 
| mailbox unavailable: 550 550 <[email protected]> | 
|-------------------------------------------| 
| mailbox unavailable: 550 550 <[email protected]> | 
|-------------------------------------------| 
|     ...      | 

per i miei scopi 2 prime righe sono identiche e 2 ultime righe sono identiche, così la query deve restituire

  1. conto viene rifiutato:
  2. cassetta postale non disponibile: 550 550

ho pensato di scrivere query che selezionerà le righe, eliminare i caratteri dopo '<' segno e la farà DISTINCT, ma non so come fare tutto in SELECT

mi potete aiutare a scrivere tale interrogazione ?

+1

Ogni messaggio avrà un '<' in esso? E vorrete sempre ignorare tutto dal * primo * '<' in poi? – MatBailie

+0

@Dems, non tutti i messaggi hanno un '< – theateist

risposta

5

Quanto segue rimuove tutto dal primo < in poi.

Il GROUP BY è più flessibile rispetto all'utilizzo di DISTINCT ma in questo caso ha la stessa funzione.

La dichiarazione CASE è disponibile per soddisfare la possibilità di messaggi che non dispongono di uno < in essi. Se c'è sempre a < Quindi utilizzare semplicemente la sezione ELSE.

SELECT 
    CASE WHEN CHARINDEX('<', Message) = 0 THEN Message ELSE LEFT(Message, CHARINDEX('<', Message)-1)) END AS Message 
FROM 
    yourTable 
GROUP BY 
    CASE WHEN CHARINDEX('<', Message) = 0 THEN Message ELSE LEFT(Message, CHARINDEX('<', Message)-1)) END 
+0

+1 al punto! :) –

+0

@Dems, posso usare regex in select/case? – theateist

+0

@theateist - Non su TSQL a meno che tu non abbia scritto il tuo. Ma non è necessario, CHARINDEX() fa quello che ti serve ... – MatBailie

Problemi correlati