首页新闻找找看学习计划

sql 相同的一个字段记录根据条件取合适的记录

0
[已解决问题] 解决于 2017-07-14 13:39

author_wcID     esiID      isTx

11                    2510      0

12                    2510       0

13                    2510       1

8                      2511       0

9                      2511       0

相同的esiID,如果isTx为1则取这条记录,否则再取author_wcID相对较小的一条记录.

也就是说上面的表我想得到这样的记录

13                    2510       1

8                      2511       0

表名:tbl_esi_places

麻烦Sql高手讲解并写下函数或Sql语句,没园豆了!

sql
依人的主页 依人 | 初学一级 | 园豆:14
提问于:2017-07-14 10:46
< >
分享
最佳答案
0

思路有了,SQL自然就有了。

思路

按照 isTx Desending, author_wcID Asending 排序, 那么不管有没有isTx为1的,

每组esliID的第一行数据就是你想要的数据。

这是假设isTx只有1和0这两个数据的情况。

 

具体的SQL我就不写了。

奖励园豆:5
爱编程的大叔 | 高人七级 |园豆:30089 | 2017-07-14 11:13

爱编程的大叔 写个呗

依人 | 园豆:14 (初学一级) | 2017-07-14 11:20

select * from tbl_esi_places order by isTx desc,author_wcID asc

这样写虽然上面的是需要的记录,但是下面也有不需要的记录,不知道怎么过滤

依人 | 园豆:14 (初学一级) | 2017-07-14 11:29

上面的是需要的记录,但是下面也没有过滤哦

依人 | 园豆:14 (初学一级) | 2017-07-14 11:30

@依人: 

自己Google 一下Rank函数用法,就知道了。

爱编程的大叔 | 园豆:30089 (高人七级) | 2017-07-14 11:53

@爱编程的大叔: 

谢谢!辛苦了

依人 | 园豆:14 (初学一级) | 2017-07-14 13:37
其他回答(2)
0

sql技术不好,咱也写不出来,但我有思路,如果写代码我倒能写出来。

1、以esiID分组,得到类似 2510 ({11,0},{12,0},{13,1})2511 ({8,0},{9,0})

2、循环每个分组,先判断有无isTx=1的项,如有,添加此条记录到临时列表中,如没有,以author_wcID排序分组记录,找出最小的记录添加到临时列表

黑峰 | 园豆:544 (小虾三级) | 2017-07-14 11:03

谢谢您的回答,c#代码我也是可以写的,关键是sql写不出来,我要用这个在生成视图还要做一些复杂的操作。关键sql函数写不出来

支持(0) 反对(0) 依人 | 园豆:14 (初学一级) | 2017-07-14 11:05
0
select author_wcID,esiID,isTx
from tb
where isTx=1
union all
select author_wcID,esiID,isTx
from tb a
where not exists(select 1 from tb where esiID=a.esiID and isTx=1) and
    not exists(select 1 from tb where esiID=a.esiID and author_wcID<a.author_wcID)

应该是这个意思

清海扬波 | 园豆:845 (小虾三级) | 2017-07-14 11:57

谢谢!

支持(0) 反对(0) 依人 | 园豆:14 (初学一级) | 2017-07-14 13:37
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册