读书人

自动生成有关问题

发布时间: 2012-03-17 19:06:28 作者: rapoo

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

表一
年级班数起始班号
初一210
初二31

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

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


[解决办法]

SQL code
create table yxdxcy1(年级 char(6), 班数 int, 起始班号 int)insert into yxdxcy1select '初一', 2, 10 union allselect '初二', 3, 1create table yxdxcy2(年级 char(6), 科目 char(6))insert into yxdxcy2select '初一', '语文' union allselect '初一', '数学' union allselect '初二', '语文' union allselect '初二', '数学' union allselect '初二', '英语'-- 创建存储过程create proc spnameasbeginselect c.年级, c.number '班', d.科目from(select a.年级,b.numberfrom yxdxcy1 ainner join master.dbo.spt_values bon b.number between a.起始班号 and a.起始班号+a.班数-1where b.[type]='P') cinner join yxdxcy2 don 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 allselect '初二',3,1declare @表二 table (年级 varchar(4),科目 varchar(4))insert into @表二select '初一','语文' union allselect '初一','数学' union allselect '初二','语文' union allselect '初二','数学' union allselect '初二','英语'select aa.*,bb.科目 from (select a.年级,b.number from @表一 aleft join master..spt_values bon b.number between a.起始班号 and 起始班号+ 班数-1and b.type='p') aa left join @表二 bb on aa.年级=bb.年级/*年级   number      科目---- ----------- ----初一   10          语文初一   10          数学初一   11          语文初一   11          数学初二   1           语文初二   1           数学初二   1           英语初二   2           语文初二   2           数学初二   2           英语初二   3           语文初二   3           数学初二   3           英语*/ 

读书人网 >SQL Server

热点推荐