数据筛选的SQL语句问题!!

噯卟釋手 2007-03-12 10:40:03
哎呀
好久没来这里啦,分也散得差不多咯。555...

今天来提个问题!~

有1----10十个数(每次随机抽5个按序排列)

表ta里已有选取的记录:

tid aa bb cc dd ee
1 1 3 7 8 9 第一抽取次13789
2 4 6 7 8 10 第二抽取次46789
3 3 5 7 8 9 第三抽取次35789

问:如何列出还那些没有出现过的组合啊?
(肯定有很多,如12345,23456等)

...全文
276 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
dawugui 2007-03-12
  • 打赏
  • 举报
回复
a b c d e
----------- ----------- ----------- ----------- -----------
1 1 1 1 1
1 1 1 1 2
1 1 1 1 3
1 1 1 1 4
1 1 1 1 5
1 1 1 1 6
1 1 1 1 7
1 1 1 1 8
1 1 1 1 9
1 1 1 1 10
1 1 1 2 1
1 1 1 2 2
1 1 1 2 3
1 1 1 2 4
1 1 1 2 5
1 1 1 2 6
1 1 1 2 7
1 1 1 2 8
1 1 1 2 9
1 1 1 2 10

..........................
(所影响的行数为 99997 行)
dawugui 2007-03-12
  • 打赏
  • 举报
回复
if object_id('pubs..tb') is not null
drop table tb
go

create table tb
(
tid int,
aa int,
bb int,
cc int,
dd int,
ee int
)

insert into tb(tid,aa,bb,cc,dd,ee) values(1, 1, 3, 7, 8, 9)
insert into tb(tid,aa,bb,cc,dd,ee) values(2, 4, 6, 7, 8, 10 )
insert into tb(tid,aa,bb,cc,dd,ee) values(3, 3, 5, 7, 8, 9)

create table test
(
a int,
b int,
c int,
d int,
e int
)

declare @a as int
declare @b as int
declare @c as int
declare @d as int
declare @e as int
set @a = 1
set @b = 1
set @c = 1
set @d = 1
set @e = 1

WHILE @a <= 10
begin
set @b = 1
while @b <= 10
begin
set @c = 1
while @c <= 10
begin
set @d = 1
while @d <= 10
begin
set @e = 1
while @e <= 10
begin
insert into test(a,b,c,d,e) values(@a,@b,@c,@d,@e)
set @e = @e + 1
end
set @d = @d + 1
end
set @c = @c + 1
end
set @b = @b + 1
end
set @a = @a + 1
end

select * from test where cast(a as varchar) + cast(b as varchar) + cast(c as varchar) + cast(d as varchar) + cast(e as varchar) not in
(select cast(aa as varchar) + cast(bb as varchar) + cast(cc as varchar) + cast(dd as varchar) + cast(ee as varchar) from tb)
drop table tb,test

子陌红尘 2007-03-12
  • 打赏
  • 举报
回复
结果自己看......
子陌红尘 2007-03-12
  • 打赏
  • 举报
回复
declare @t1 table(tid int,aa int,bb int,cc int,dd int,ee int)
insert into @t1 select 1,1,3,7,8,9
insert into @t1 select 2,4,6,7,8,10
insert into @t1 select 3,3,5,7,8,9

declare @t2 table(id int)
insert into @t2
select 1 union select 2 union select 3 union select 4
union select 5 union select 6 union select 7 union select 8
union select 9 union select 10

select
n.*
from
(select
a.id aa,b.id bb,c.id cc,d.id dd,e.id ee
from
@t2 a,@t2 b,@t2 c,@t2 d,@t2 e
where
a.id<b.id and b.id<c.id and c.id<d.id and d.id<e.id) n
where
not exists(select 1 from @t1 where aa=n.aa and bb=n.bb and cc=n.cc and dd=n.dd and ee=n.ee)
噯卟釋手 2007-03-12
  • 打赏
  • 举报
回复
晕~~

看来这个问题要不了了之咯~~

噯卟釋手 2007-03-12
  • 打赏
  • 举报
回复
哎呀~~ 能不能说得明白点啊

主要是语句不太会写~~

郁闷哈~

  • 打赏
  • 举报
回复
先把所有组合 存在临时表中 然后筛选
dawugui 2007-03-12
  • 打赏
  • 举报
回复
上面的a,b,c,d,e代表你抽出来的五个数.
dawugui 2007-03-12
  • 打赏
  • 举报
回复
抽出了的数加起来不在表中.

如select ..... from where cast(a as varchar) + cast(b as varchar) + cast(c as varchar) + cast(d as varchar) + cast(e as varchar) no in (select cast(aa as varchar)+cast(bb as varchar)+cast(cc as varchar)+cast(dd as varchar)+cast(ee as varchar) from ta)
噯卟釋手 2007-03-12
  • 打赏
  • 举报
回复
表ta的字段就是 tid aa bb cc dd ee 均为int型的tid自增

太罗嗦了~~

嘻~~
噯卟釋手 2007-03-12
  • 打赏
  • 举报
回复
重复一下问题 上面有几个字顺序弄错咯 ^_^

哎呀
好久没来这里啦,分也散得差不多咯。555...

今天来提个问题!~

有1----10十个数(每次随机抽5个按序排列)

表ta里已有选取的记录:

tid aa bb cc dd ee
1 1 3 7 8 9 第一次抽取13789
2 4 6 7 8 10 第二次抽取46789
3 3 5 7 8 9 第三次抽取35789

问:如何列出还那些没有出现过的组合啊?
(肯定有很多,如12345,23456等)
噯卟釋手 2007-03-12
  • 打赏
  • 举报
回复
最后100分拿出50分来与大家共享!~~
  • 打赏
  • 举报
回复
按照楼主的要求a,b,c,d,e应该是不重复的5个数字所以修改部分 老乌龟的代码
WHILE @a <= 6
begin
set @b = @a+1
while @b <= 7
begin
set @c = @b+1
while @c <=8
begin
set @d = @c+1
while @d <= 9
begin
set @e = @d+1
while @e <= 10
begin
insert into test(a,b,c,d,e) values(@a,@b,@c,@d,@e)
set @e = @e + 1
end
set @d = @d + 1
end
set @c = @c + 1
end
set @b = @b + 1
end
set @a = @a + 1
end

34,587

社区成员

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

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