日期:2014-05-18  浏览次数:20567 次

自动生成问题
现有以下两个表

表一
年级 班数 起始班号
初一 2 10
初二 3 1

表二
年级 科目
初一 语文
初一 数学
初二 语文
初二 数学
初二 英语

建立一个存储过程,需要时调用,生成下面的表
年级 班 科目
初一 10 语文
初一 10 数学
初一 11 语文
初一 11 数学
初二 1 语文
初二 1 数学
初二 1 英语
初二 2 语文
初二 2 数学
初二 2 英语


------解决方案--------------------
SQL code

create table yxdxcy1
(年级 char(6), 班数 int, 起始班号 int)

insert into yxdxcy1
select '初一', 2, 10 union all
select '初二', 3, 1

create table yxdxcy2
(年级 char(6), 科目 char(6))

insert into yxdxcy2
select '初一', '语文' union all
select '初一', '数学' union all
select '初二', '语文' union all
select '初二', '数学' union all
select '初二', '英语'


-- 创建存储过程
create proc spname
as
begin
select c.年级, c.number '班', d.科目
from
(select a.年级,b.number
from yxdxcy1 a
inner join master.dbo.spt_values b
on b.number between a.起始班号 
and a.起始班号+a.班数-1
where b.[type]='P') c
inner join yxdxcy2 d
on c.年级=d.年级
end

-- 执行
exec spname

-- 结果
年级     班           科目
------ ----------- ------
初一     10          语文  
初一     10          数学  
初一     11          语文  
初一     11          数学  
初二     1           语文  
初二     1           数学  
初二     1           英语  
初二     2           语文  
初二     2           数学  
初二     2           英语  
初二     3           语文  
初二     3           数学  
初二     3           英语  

(13 row(s) affected)

------解决方案--------------------
SQL code

declare @表一 table (年级 varchar(4),班数 int,起始班号 int)
insert into @表一
select '初一',2,10 union all
select '初二',3,1
declare @表二 table (年级 varchar(4),科目 varchar(4))
insert into @表二
select '初一','语文' union all
select '初一','数学' union all
select '初二','语文' union all
select '初二','数学' union all
select '初二','英语'

select aa.*,bb.科目 from 
(
select a.年级,b.number from @表一 a
left join master..spt_values b
on b.number between a.起始班号 and 起始班号+ 班数-1
and b.type='p'
) aa left join @表二 bb on aa.年级=bb.年级
/*
年级   number      科目
---- ----------- ----
初一   10          语文
初一   10          数学
初一   11          语文
初一   11          数学
初二   1           语文
初二   1           数学
初二   1           英语
初二   2           语文
初二   2           数学
初二   2           英语
初二   3           语文
初二   3           数学
初二   3           英语
*/