选择列表中的SQL标签

时间:2015-03-10 13:27:39

标签: sql subquery

我的表中有下面的行,显示患者(作为PatientCon),疾病和标签(0 | 1作为serviceInterupt)。

如果患者同时拥有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 | Not Active as 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中执行此操作?

编辑: 我正在使用的表是

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

3 个答案:

答案 0 :(得分: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;

答案 1 :(得分: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

答案 2 :(得分: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引擎,因此如果您标记它可能有所帮助。