遇到的一个难题,大家帮忙

hoxisoft 2004-03-18 05:36:49
在界面输入时,在连个文本框里输入一个CODE范围,如01-12,对应地区XXX

如果存到如下结构的表中

CODE 地区
01 XXX
02 XXX
... ...

谢谢大家的帮忙。
...全文
30 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
hoxisoft 2004-03-19
  • 打赏
  • 举报
回复
谢谢,十分感谢,揭贴
zjcxc 2004-03-18
  • 打赏
  • 举报
回复
--测试

--测试数据
create table 表(code char(2),地区 varchar(10))
insert 表 select '01','XXX'
union all select '02','XXX'
union all select '03','XXX'
union all select '04','XXX'
union all select '05','XXX'
union all select '06','XXX'
union all select '07','XXX'
union all select '08','XXX'
union all select '09','yyy'
union all select '10','yyy'
union all select '11','XXX'
union all select '12','XXX'
go

--想来想去,都是要用临时表
select code,地区,id=0 into #t from 表

declare @地区 varchar(10),@i int
set @i=0
update #t set @i=case 地区 when @地区 then @i else @i+1 end
,id=@i,@地区=地区

select 代码范围=min(code)+'-'+max(code),地区=min(地区)
from #t
group by id
go

--删除测试环境
drop table 表,#t

/*--测试结果
代码范围 地区
----- ----------
01-08 XXX
09-10 yyy
11-12 XXX

(所影响的行数为 3 行)
--*/
zjcxc 2004-03-18
  • 打赏
  • 举报
回复
--想来想去,都是要用临时表
select code,地区,id=0 into #t from 表

declare @地区 varchar(10),@i int
set @i=0
update #t set @i=case 地区 when @地区 then @i else @i+1 end
,id=@i,@地区=地区

select 代码范围=min(code)+'-'+max(code),地区=min(地区)
from #t
group by id
hoxisoft 2004-03-18
  • 打赏
  • 举报
回复
邹建
,,,,,如果反过来呢???

比如表里有下面这些

code 地区
---- ----------
01 XXX
02 XXX
03 XXX
04 XXX
05 XXX
06 XXX
07 XXX
08 XXX
09 yyy
10 yyy
11 XXX
12 XXX

我在界面上显示 代码范围 地区
01-08 xxx
09-10 yyy
11-12 xxx

谢谢,我没接触过,麻烦您了。



hoxisoft 2004-03-18
  • 打赏
  • 举报
回复
谢谢 邹建

我没做过,还是看不明白啊
zjcxc 2004-03-18
  • 打赏
  • 举报
回复
--写个存储过程处理
create proc p_process
@start int, --开始
@end int --结果
as
insert 表(CODE,地区)
select right(101+a.id+b.id,2),'XXX'
from(
select id=0 union all select 1
union all select id=2 union all select 3
union all select id=4 union all select 5
union all select id=6 union all select 7
union all select id=8 union all select 9
) a,(
select id=0 union all select 10
union all select id=20 union all select 30
union all select id=40 union all select 50
union all select id=60 union all select 70
union all select id=80 union all select 90
) b where a.id+b.id between @start-1 and @end-1
go

--测试
create table 表(code char(2),地区 varchar(10))
go

--调用存储过程
exec p_process '01','12'
go

--显示处理结果
select * from 表
go

--删除测试环境
drop table 表
drop proc p_process

/*--测试结果
code 地区
---- ----------
01 XXX
02 XXX
03 XXX
04 XXX
05 XXX
06 XXX
07 XXX
08 XXX
09 XXX
10 XXX
11 XXX
12 XXX

(所影响的行数为 12 行)
--*/
zjcxc 2004-03-18
  • 打赏
  • 举报
回复
--写个存储过程处理

create proc p_process
@start int, --开始
@end int --结果
as
insert 表(CODE,地区)
select right(101+a.id+b.id,2),'XXX'
from(
select id=0 union all select 1
union all select id=2 union all select 3
union all select id=4 union all select 5
union all select id=6 union all select 7
union all select id=8 union all select 9
) a,(
select id=0 union all select 10
union all select id=20 union all select 30
union all select id=40 union all select 50
union all select id=60 union all select 70
union all select id=80 union all select 90
) b where a.id+b.id between @start-1 and @end-1
go
hoxisoft 2004-03-18
  • 打赏
  • 举报
回复
还是不明白啊兄弟
leeboyan 2004-03-18
  • 打赏
  • 举报
回复
看不懂,up
crazymanlgm 2004-03-18
  • 打赏
  • 举报
回复
两个记录不就行了
01 地区1
02 地区1
hoxisoft 2004-03-18
  • 打赏
  • 举报
回复
是两个文本框

一个写01另一个写12

22,207

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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