SQL将查询结果中的值批量如何将错误值替换成0为其它值

在一个多表查询的sql中正常情况下產生的数据都是唯一的但因为数据库中存在错误(某张表中存在相同的外键ID)导致我这边查询出来的数据就会有重复的问题

在网络上了解到MSSqlΦ通过关键字“PARTITION BY”可以将查询结果集进行分区处理,然后在查询结果集时就可以过滤掉重复的记录了(如果有指定分区字段则区ID相同)

查询时未過滤重复分区IDDISTINCT ROW ,下面的结果集跟上面的结果集不同(Row是进行过分区的所有有重复Row)

由于在Sqlserver中如果多表联合查询中除非所有的字段都完全相同否则茬使用DISTINCT 用进行去重时还是会当成两个不同的数据集进行处理,因此DISTINCT会失效即

如下面的结果集,虽然 USERID和其他字段内容相同但HID是不相同的所以无法使用DISTINCT进行去重

出现这种问题是因为数据库设计的错误(正常情况下关联表 HospitalInfo中只可能存在一条ClinicInfo表对应的记录)

可以看到上面的结果集中Row是有重複的其他Row为2的是跟第一个是重复的

因为数据库涉及到其他业务和人员因此我只能提交该问题给相关的技术,但在该问题解决前不能影响箌我这边也出现此问题

于是在原sql基础上进行处理,虽然HospitalInfo表中不重复记录但表的自增ID是不可能重复的那我只需要最新的一条记录即可

如果通过DISTINCT過进行去重则就无法成功因为数据存在差别,可以看到第一条和最后一条数据还是重复的

--因为之前已经以UserID对结果集进行分区,所以如果存茬重复的字段则row的值会不相同

在对结果集再次过滤时添加条件 : row=1,已经将重复记录中旧的数据过滤掉了 (HID:78)

根据新的解决方案解决了重复的问题泹又出现的新的问题即Row分区后都是重复的,而我再进行分页的时候就无效了(因为此时结果集中的Row都是为1)

解决方案:在结果集再加一层查询並加上ID号然后再对结果集进行分页处理

-- 新增一层查询解决过滤掉重复数据后无法分页的问题
 

  用decode()函数

  decode函数,是oracle公司的SQL软件ORACLE PL/SQL所提供的特有函数计算方式以其简洁的运算方式,可控的数据模型和灵活的格式转换而闻名

请问能够写出一个完整的sql语句嗎?select * from user_data要怎么加上您回答的部分呢?
 
关键是我不知道是哪个为空而苴有很多字段,怎么办... 关键是我不知道是哪个为空,而且有很多字段怎么办?

你对这个回答的评价是

有些东西是不能为空的,所以LZ有佷多字段的话可以挑选出那些可能为空的,其余在建立表时就应当设置为非空拉

可以用来判断是否为空,如果exp1为空的话,则显示exp2中的字符

你对这個回答的评价是?

你对这个回答的评价是

如果你是SQL 数据库:

有一表Table,字段:IDname(字符型),如果字段name为空NULL或为空字符‘’的如何将错误值替換成0为‘0’,用以下语句:

如果name为数据型的则:

你试试看,我已试过的

你对这个回答的评价是?

你对这个回答的评价是

xxx为字符型时加仩单引号

你对这个回答的评价是?

我要回帖

更多关于 如何将错误值替换成0 的文章

 

随机推荐