数据表由3个字段,第一个字段为编号,第二个字段和第三个字段做判断用的,
数据分别为
00101 Y N
00101 N Y
00101 N N
00202 N N
,如果第二个字段有Y或者第三个字段有Y,取Y,如果都是N,也取
经过数据处理后想得到的结果是这样的
00101 Y Y
给你一个思路:
sql中用case when将‘Y’转化为1,将‘N’转化为0,然后分组求和,这样你会得到的数据如下:
00101 1 1
00202 0 0
最后再将‘1’转换为‘Y',将'0'转换为'N'
什么数据库?
用case when 可以实现
将第二个字段和第三个字段的值作为判断条件将满足条件的赋值为大于0的数(最好足够大)不满足的赋值为小于0的数(最好足够小-1最好),求和之后大于0说明两列数据里的有Y ,小于0说明只含有N。嵌套一次sql 使用CASE WEHN 判断该列大于0赋值为Y,否则赋值为N,需要保证两列的原数据的话就把这列 再取一边 随便重命名下就行了
CASE WHEN 字段2=Y OR 字段3=Y THEN 5000 ELSE -1 END 判断
嵌套外层sql
CASE WHEN 判断>0 THEN Y ELSE N END 字段2
CASE WHEN 判断>0 THEN Y ELSE N END 字段3
由于同时对两列进行判断的,所以实现的效果就是俩列数据里是否含有Y,含有为Y ,不含有为N
select * from 你的表名
where
(字段2 = 'Y' OR 字段3 = 'Y')
OR
(字段2 = 'N' AND 字段3 = 'N')