一个并不复杂的问题

zcxc 2003-05-11 09:44:05
有一个aaa表,如:

bh b1 b2 b3 b4
1 12345 12341 null null
2 12344 12345 null null
3 12345 12342 null null
4 12343 12345 null null
5 12345 12343 null null
6 12345 12344 null null
7 12344 12343 null null
8 12344 12321 null null
9 12312 12322 null null
10 12345 12323 null null
11 12321 12344 null null
12 12121 12212 null null
13 12323 12312 null null

b1、b2列可存在相同的数据,要在b1列中找出不同的数据,且要求在b1、b2列数据相同的情况下,在先出现的数据行的b3、b4列分别标上‘1’和bh列的号码,其余b1、b2列中相同的数据在b4列上标上bh列的号码。 可用下面存储过程实现。
CREATE proc cx
as
declare @sz int,@aa int
set @sz=1
select @aa=count(*) from aaa
while @sz<=@aa
begin
if exists (select b1 from aaa where bh=@sz and b3 is null and b4 is null)
begin
update aaa set b3=1 where bh=@sz
update aaa set b4=@sz where b1=(select b1 from aaa where bh=@sz) and b4 is null or b2=(select b1 from aaa where bh=@sz) and b4 is null
end
select @sz=@sz+1
end
return

得到结果如下:

bh b1 b2 b3 b4
1 12345 12341 1 l
2 12344 12345 null 1
3 12345 12342 null 1
4 12343 12345 null 1
5 12345 12343 null 1
6 12345 12344 null 1
7 12344 12343 1 7
8 12344 12321 null 7
9 12312 12322 1 9
10 12345 12323 null 1
11 12321 12344 null 7
12 12121 12212 1 12
13 12323 12312 null 9

问题是在数据量很大时,用while循环逐个查找,挺费时的。有没有更好的方法实现上述要求。

...全文
69 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
zcxc 2003-05-11
  • 打赏
  • 举报
回复
高手们都休息了??????
zcxc 2003-05-11
  • 打赏
  • 举报
回复
错了,b1的行8数据与行7相同,只是b4标上bh号码,行11也是一样。类似的,b1列的行9,行12的数据也算是第一次出现的数据。
zcxc 2003-05-11
  • 打赏
  • 举报
回复
如:b1列的行1为‘12345’,属第一次出现不同的数据,那行1的b3标上‘1’,b4就填入bh的号码,在行3、5、6、10和b2的行2、4的‘12345’都与b1列的行1数据相同,故要求在b4相应的行中填入bh的号码。行2的b2列因已有‘12345’与行1的b1列‘12345’相同,故在b1列,行2的‘12344’数据不能算是第一次出现的不同的数据。只有b1的行7中‘12344’才算是第一次出现的数据,相应的b3、b4就分别标上‘1’和bh的号码。b1的行8中‘12344’与行7的第一次出现的数据的‘12344’相同,b3、b4就分别标上‘1’和bh的号码。这样的要求能用别的办法实现吗?
hooboo 2003-05-11
  • 打赏
  • 举报
回复
没明白,B3,B4在什么条件下改变

34,838

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧