日期:2014-05-18 浏览次数:20567 次
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)
------解决方案--------------------
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 英语 */