根据条件重新分类表的一列中的字段

时间:2013-06-19 13:14:34

标签: 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(它只是一个不同的选择)加上“其他” - 那么我想删除包含其他的行

这意味着拥有“X”和“其他”的人会删除包含“其他”的行,但只有“其他”的人会保留为“其他”。即。

person       drug
------       -----
1            Y
2            Y
3            X
4            X
5            X
6            other
7            Z

其中6人只有其他人,所以保持这种方式,但是第2和第5人已经删除了“其他”行,因为他们有其他药物选择(x,y或z)。

非常感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

目前还不清楚您是希望在查询结果中还是在数据本身中删除此项。要从查询中返回没有此行的结果,可以这样写:

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')