我的表中有下面的行,显示患者(作为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,
答案 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引擎,因此如果您标记它可能有所帮助。