Sql 根据条件对表的一列中的字段重新分类
我有下表:Sql 根据条件对表的一列中的字段重新分类,sql,db2,Sql,Db2,我有下表: person drug ------ ----- 1 Y 2 Y 2 other 3 X 4 X 5 X 5 other 6 other 7 Z 但是,如果有人服用药物x,y,z(这将只是一个不同的选择)加上“other”-那么我想删除包含other的行 这意味着
person drug
------ -----
1 Y
2 Y
2 other
3 X
4 X
5 X
5 other
6 other
7 Z
但是,如果有人服用药物x,y,z
(这将只是一个不同的选择)加上“other”-那么我想删除包含other的行
这意味着带有“X”和“other”的人将删除包含“other”的行,但只有“other”的人将保留为“other”。i、 e
person drug
------ -----
1 Y
2 Y
3 X
4 X
5 X
6 other
7 Z
其中,第6人只有其他药物,因此保持这种状态,但第2人和第5人删除了“其他”行,因为他们有其他药物选择(x、y或z)
非常感谢您的帮助。不清楚您是希望在查询结果中还是在数据本身中删除此项。要从查询中返回不带此行的结果,可以这样编写:
select t.*
from t
where not (t.drug = 'other' and
exists (select 1 from t t2 where t2.person = t.person and t2.drug = 'x')
)
要处理任何“x”、“y”或“z”,请将最后一条语句更改为
t2.drug in('x”、“y”、“z')
。为什么对MySQL和DB2都加上标签?我无法让它对我起作用。它返回相同的表。也许我忽略了你代码中的某些内容,所以我会继续尝试。@brucezepplin。是我的错。子查询在drug
上的别名错误。修正了,没问题。我应该自己发现的。现在一切都好了。谢谢你的帮助。