2016-04-07 2 views
1

я написал SQL, чтобы получить результат ниже:SQL для активного и неактивного статуса

Case No: 1   Status:Inactive 
    Case No: 2   Status:Active 
    Case No: 2   Status:Inactive 
    Case No: 3   Status:Active 

СКП является:

select Case No, 
Case when status in ('Hospital', 'Discharge') then 'Inactive' else 'Active' end as status 
from Cases 

Если для случая нет, например, дело № 2, там - это неактивный и активный, статус неактивен. Как я могу изменить Sql, чтобы получить следующий результат?

Case No :1    Status:Inactive 
Case No :2    Status:Inactive 
Case No: 3    Status:Active 
+1

Есть много способов сделать это, но это зависит от фактической структуры таблицы. Здесь отличное место для начала. http://spaghettidba.com/2015/04/24/how-to-post-at-sql-question-on-a-public-forum/ –

+0

Состояние - тип varchar, я не могу использовать либо sum(), либо Max () – Ice

ответ

0

Try ниже запроса

Select [Case No], 
CASE MAX(Status) WHEN 0 THEN 'active' ELSE 'Inactive' END Status 
FROM 
(
select [Case No], 
    CASE WHEN status in ('Hospital', 'Discharge') THEN 1 ELSE 0 END status 
    from Cases) C 
group by [Case No] 

SQL demo link

Посмотреть скриншот enter image description here

+0

Не работает. – Ice

+0

@Cindy Добавлена ​​ссылка для скрипта sql. Пожалуйста, нажмите и попробуйте изменить значения с левой стороны, построить схему и повторный запрос. – DhruvJoshi

+0

Большое вам спасибо! – Ice

2

Учитывая имена, которые для статусов, это, кажется, достаточно использовать max():

select CaseNo, 
     max(Case when status in ('Hospital', 'Discharge') then 'Inactive' else 'Active' 
      end) as status 
from Cases 
group by CaseNo; 

Более общее решение, которое не зависит от лексикографического упорядочения названий:

select CaseNo, 
     (case when sum(status in ('Hospital', 'Discharge')) > 0 
      then 'Inactive' 
     else 'Active' 
      end) as status 
from Cases 
group by CaseNo;