双11狂欢大促

盲盒赢 定制羽绒服

开启惊喜盲盒,抽取你的专属好礼

— 惊喜奖品抢先看 —

如何实现以下的数据查找??

freetd freetd 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
现有一表,数据如下:
源表[T]
col1   col2   ID col3   col4
a A 1 400-1 BH
b NULL 2 400-2 NULL
c B 3 400-3 BF
d NULL 4 400-1 NULL
e B 5 400-2 BH
f B 6 400-3 NULL
g CN 7 400-1 NULL
g EN 8 400-1 NULL
f NULL 9 400-3 NULL
x CN 10 400-1 NULL
s EN 11 400-1 NULL
h NULL 12 400-3 NULL
b CN 13 400-5 NULL
f EN 14 400-6 NULL
x CN 15 400-1 NULL
s EN 16 400-1 NULL
b NULL 17 400-3 NULL
v A 18 400-3 BF
在这张表中找出列col4中为BH的行,接着在找出的记录中分两种情况进行进一步的查找。
注意:ID列是已经按从小到大排序,且是唯一的

--第一种情况是col4列的值是BH且col2列的值是A如下
col1   col2   ID col3   col4
a A 1 400-1 BH
--第一种情况查找过程:根据上一记录中col3列的值400-1在往后列col3所有都为400-1的记录,筛选出col2列中最先出现CN或EN的记录。
d NULL 4 400-1 NULL
g CN 7 400-1 NULL
g EN 8 400-1 NULL
x CN 10 400-1 NULL
s EN 11 400-1 NULL
x CN 15 400-1 NULL
s EN 16 400-1 NULL
--第一种情况的最终结果
col1 col2 ID col3 col4
a A 1 400-1 BH
g CN 7 400-1 NULL

--第二种情况稍微有些不同,col4列的值是BH且col2的值是B,如下:
col1   col2   ID col3   col4
e B 5 400-2 BH
--第二种情况查找过程:这里查找的是与400-2相同的记录,而是比400-2要大的所有记录并从中筛选出col2列中最先出现CN或EN的记录。
f B 6 400-3 NULL
f NULL 9 400-3 NULL
b CN 13 400-5 NULL
f EN 14 400-6 NULL
b NULL 17 400-3 NULL
v A 18 400-3 BF
--第二种情况的最终结果
col1 col2 ID col3 col4
e B 5 400-2 BH
b CN 13 400-5 NULL

--最后的结果就是两种情况的结果联合起来
col1 col2 ID col3 col4
a A 1 400-1 BH
g CN 7 400-1 NULL
e B 5 400-2 BH
b CN 13 400-5 NULL
...全文
评论 12
收藏 已收藏
分享
返回顶部
freetd
应用实例 27,579 成员 68,540 内容