2012-02-15 12 views
19

Oto uproszczenia, problemu: Mam select, który wygląda tak:SQL warunkowego kolumna powrót dane w instrukcji select

Select ID, Assignee, WorkStream from assignees; 

I przystawki strzał danych zwrócony wyglądało to

1|Joe Soap|Internal 

2|Mrs Balls|External 

To, co chciałbym zrobić, to wybrać opcję nie wyświetlać nazwy Cesjonariusza, jeśli worksteam jest wewnętrzna. Zamiast wyświetlać Workstream.

Tak na przykład wynik chcę osiągnąć byłoby to:

1|Internal|Internal 

2|Mrs Balls|External 

Mam nadzieję, że to ma sens? Zasadniczo selekcja warunkowa, która może wykryć, czy dana kolumna zawiera określoną wartość, a następnie zastąpić inną wartość kolumn [cokolwiek].

Z góry dziękuję!

EDIT chcę osiągnąć coś takiego:

Select ID, if (workstream='internal' select Workstream as Assignee - else - select Assignee as Assigneee), WorkStream from assignees; 

Odpowiedz

40

Nie wspominając swoje DBMS ale poszukiwanej CASE oświadczenie działa we wszystkich głównych DBMS wiem wyłączyć.

SELECT ID 
     , CASE WHEN WorkStream = 'Internal' 
       THEN WorkStream 
       ELSE Assignee 
      END AS Assignee 
     , Workstream 
FROM assignees 

referencyjny: MSDN

CASE

Ocenia listę warunków i zwraca jedną z wielu możliwych wyrażeń wynikowych.

+0

Wygląda całkiem nieźle, pozwól mi przetestować to szybko! –

3
SELECT ID, 
     CASE WorkStream WHEN 'Internal' THEN 'INTERNAL' ELSE Assignee as Assignee, WorkStream from assignees 

Mam nadzieję, że ta pomoc.

Powiązane problemy