2015-03-10 1 views
0

У меня есть таблица со строками ниже, в которой показаны пациенты (как PatientCon), болезнь и метка (0 | 1 как serviceInterupt).SQL-метка в списке выбора

Пациент может иметь несколько строк в результате, если он имеет как метку 0, так и 1 метку.

ServiceInterrupt Disease PatientCon 
0     d1  1111 
0     d1  1112 
1     d1  1112 
0     d1  1113 
0     d1  1114 
1     d1  1114 
1     d1  1115 

Что я хочу, чтобы добавить новый столбец с меткой (Active | Не активен как NewLabel), показывает, если пациент имеет по крайней мере один ряд с serviceInterrupt = 1.

ServiceInterrupt Disease PatientCon NewLabel 
0     d1  1111  Active 
0     d1  1112  Not Active 
1     d1  1112  Not Active  
0     d1  1113  Active 
0     d1  1114  Not Active 
1     d1  1114  Not Active 
1     d1  1115  Not Active 

Как я могу это сделать в SQL?

EDIT: таблица я использую это

patientConcerned int NOT NULL, 
disease ntext NULL, 
ServiceInterrupt bit NULL, 
+0

Пожалуйста, отметьте свой вопрос в базе данных, которую вы используете. –

+0

Вы хотите добавить столбец в таблицу или попытаетесь найти запрос, который покажет вам столбец «Новая метка»? – bjorsig

ответ

0

Использование стандартного SQL, вы можете сделать это, используя case заявление и функции окна:

select ServiceInterrupt, Disease, PatientCon, 
     (case when max(ServiceInterrupt) over (partition by PatientCon) > 0 
      then 'Not Active' 
      else 'Active' 
     end) as newLabel 
from table; 
+0

Извините! Мы публикуем в то же время! : D – Galma88

+0

@ Galma88. , , Вау! Кажется, мы одновременно ответили на второе. –

0
SELECT ServiceInterrupt, 
     Disease, 
     PatientCon 
     (CASE WHEN NOT EXISTS (SELECT 1 
          FROM your_table AS B 
          WHERE A.PatientCon = B.PatientCon AND B.ServiceInterrupt = 'True') 
     THEN 'Not Active' 
     ELSE 'Active' 
    END) AS NewLabel 
FROM your_table AS A 
+0

Бит типа данных операнда недействителен для оператора max. Это то, что я получаю как результат. – Daggy

+0

Попробуйте с моим редактированием – Galma88

0

Если предыдущий ответы не работают для вас, попробуйте что-то вроде:

select serviceInterrupt, disease, PatientCon, 
     (case when exists (select * 
         from table b 
         where a.patientCon = b.patientCon 
          and b.serviceInterrupt = 1) 
      then 'Active' 
      else 'Not Active' 
     end) as newLabel 
from table a; 

Точный синтаксис может отличаться в зависимости от того, какой SQL-движок вы используете, поэтому если вы отметите его, это может помочь.

+0

Это то же самое, что я записал здесь – Galma88

+0

Должно быть, я писал это во время редактирования - не заметил ваших изменений до того, как я опубликовал их. – EmbraCraig

Смежные вопросы