当前位置: 代码迷 >> Sql Server >> 自动生成有关问题
  详细解决方案

自动生成有关问题

热度:61   发布时间:2016-04-27 14:40:43.0
自动生成问题
现有以下两个表

表一
年级 班数 起始班号
初一 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 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           英语*/
  相关解决方案