请文dawwugui:为什么“期数 = a.订报开始期 + b.id” b.id是什么意思,本人是初学者,请您一定回复,非常感谢! b.id 的值为 0,1,2,3,4,5,6.........这样从a.订报开始期分别加b.id的值获取每期的期号,如果>b.结束期则终止。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 上贴地址是:http://topic.csdn.net/u/20071212/09/e89e3b71-0d7c-4929-b79b-df3dac6b2e60.html [code=SQL]--利用一个临时表.create table tb(报刊种类 varchar(10) , 订报开始期 int, 订报结束期 int, 每期订报数 int)insert into tb values('小低版' , 1 , 13 , 900) insert into tb values('小中版' , 2 , 26 , 87 )insert into tb values('高中版' , 26 , 52 , 45 )insert into tb values('小中版' , 1 , 26 , 200)goSELECT TOP 100 id = identity(int,0,1) INTO tmp FROM syscolumns a, syscolumns b select * from tmp/*id ----------- 0123456789101112...*/ select a.报刊种类 , 期数 = a.订报开始期 + b.id , a.每期订报数 from tb a , tmp b where a.订报开始期 + b.id <= a.订报结束期 /*报刊种类 期数 每期订报数 ---------- ----------- ----------- 小低版 1 900小低版 2 900小低版 3 900小低版 4 900小低版 5 900小低版 6 900小低版 7 900小低版 8 900小低版 9 900小低版 10 900小低版 11 900小低版 12 900小低版 13 900小中版 2 87小中版 3 87小中版 4 87小中版 5 87小中版 6 87小中版 7 87小中版 8 87小中版 9 87...*/--然后对上面结果做行列转换select 期数 , sum(case 报刊种类 when '小低版' then 每期订报数 else 0 end) '小低', sum(case 报刊种类 when '小中版' then 每期订报数 else 0 end) '小中', sum(case 报刊种类 when '高中版' then 每期订报数 else 0 end) '高中'from( select a.报刊种类 , 期数 = a.订报开始期 + b.id , a.每期订报数 from tb a , tmp b where a.订报开始期 + b.id <= a.订报结束期 ) tgroup by 期数order by 期数drop table tb,tmp/*期数 小低 小中 高中 ----------- ----------- ----------- ----------- 1 900 200 02 900 287 03 900 287 04 900 287 05 900 287 06 900 287 07 900 287 08 900 287 09 900 287 010 900 287 011 900 287 012 900 287 013 900 287 014 0 287 015 0 287 016 0 287 017 0 287 018 0 287 019 0 287 020 0 287 021 0 287 022 0 287 023 0 287 024 0 287 025 0 287 026 0 287 4527 0 0 4528 0 0 4529 0 0 4530 0 0 4531 0 0 4532 0 0 4533 0 0 4534 0 0 4535 0 0 4536 0 0 4537 0 0 4538 0 0 4539 0 0 4540 0 0 4541 0 0 4542 0 0 4543 0 0 4544 0 0 4545 0 0 4546 0 0 4547 0 0 4548 0 0 4549 0 0 4550 0 0 4551 0 0 4552 0 0 45(所影响的行数为 52 行)*/[/code] --也可以不用临时表.因为你的期号最多到52,如果很多就用临时表的办法。create table tb(报刊种类 varchar(10) , 订报开始期 int, 订报结束期 int, 每期订报数 int)insert into tb values('小低版' , 1 , 13 , 900) insert into tb values('小中版' , 2 , 26 , 87 )insert into tb values('高中版' , 26 , 52 , 45 )insert into tb values('小中版' , 1 , 26 , 200)goselect 期数 , sum(case 报刊种类 when '小低版' then 每期订报数 else 0 end) '小低', sum(case 报刊种类 when '小中版' then 每期订报数 else 0 end) '小中', sum(case 报刊种类 when '高中版' then 每期订报数 else 0 end) '高中'from( select a.报刊种类 , 期数 = a.订报开始期 + b.id , a.每期订报数 from tb a , ( select 0 as id union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 id union select 9 union select 10 union select 11 union select 12 union select 13 union select 14 union select 15 union select 16 id union select 17 union select 18 union select 19 union select 20 union select 21 union select 22 union select 23 union select 24 id union select 25 union select 26 union select 27 union select 28 union select 29 union select 30 union select 31 union select 32 id union select 33 union select 34 union select 35 union select 36 union select 37 union select 38 union select 39 union select 40 id union select 41 union select 42 union select 43 union select 44 union select 45 union select 46 union select 47 union select 48 id union select 49 union select 50 ) b where a.订报开始期 + b.id <= a.订报结束期 ) tgroup by 期数order by 期数drop table tb/*期数 小低 小中 高中 ----------- ----------- ----------- ----------- 1 900 200 02 900 287 03 900 287 04 900 287 05 900 287 06 900 287 07 900 287 08 900 287 09 900 287 010 900 287 011 900 287 012 900 287 013 900 287 014 0 287 015 0 287 016 0 287 017 0 287 018 0 287 019 0 287 020 0 287 021 0 287 022 0 287 023 0 287 024 0 287 025 0 287 026 0 287 4527 0 0 4528 0 0 4529 0 0 4530 0 0 4531 0 0 4532 0 0 4533 0 0 4534 0 0 4535 0 0 4536 0 0 4537 0 0 4538 0 0 4539 0 0 4540 0 0 4541 0 0 4542 0 0 4543 0 0 4544 0 0 4545 0 0 4546 0 0 4547 0 0 4548 0 0 4549 0 0 4550 0 0 4551 0 0 4552 0 0 45(所影响的行数为 52 行)*/ 执行查询 bulk insert怎样插入表中指定的列? sql语句问题,有兴趣的帮忙看看! 小问题一个...请教. 关于字符串截取的问题? 父子关系的问题 每隔时间就添加若干条数据,现在只想保留最后一次添加的怎么做 这段代码是什么意思? 求SQL语句,关于字符串连接的。有点难度。(即刻结分) 初学ODBC,怎么用循环的方式往数据库里边写记录 sql server 实现自增和排序 存储过程传递参数含有日期的时候总是报错????
http://topic.csdn.net/u/20071212/09/e89e3b71-0d7c-4929-b79b-df3dac6b2e60.html
create table tb(报刊种类 varchar(10) , 订报开始期 int, 订报结束期 int, 每期订报数 int)
insert into tb values('小低版' , 1 , 13 , 900)
insert into tb values('小中版' , 2 , 26 , 87 )
insert into tb values('高中版' , 26 , 52 , 45 )
insert into tb values('小中版' , 1 , 26 , 200)
goSELECT TOP 100 id = identity(int,0,1) INTO tmp FROM syscolumns a, syscolumns b
select * from tmp
/*
id
-----------
0
1
2
3
4
5
6
7
8
9
10
11
12
...
*/ select a.报刊种类 , 期数 = a.订报开始期 + b.id , a.每期订报数 from tb a , tmp b where a.订报开始期 + b.id <= a.订报结束期
/*
报刊种类 期数 每期订报数
---------- ----------- -----------
小低版 1 900
小低版 2 900
小低版 3 900
小低版 4 900
小低版 5 900
小低版 6 900
小低版 7 900
小低版 8 900
小低版 9 900
小低版 10 900
小低版 11 900
小低版 12 900
小低版 13 900
小中版 2 87
小中版 3 87
小中版 4 87
小中版 5 87
小中版 6 87
小中版 7 87
小中版 8 87
小中版 9 87
...
*/--然后对上面结果做行列转换select 期数 ,
sum(case 报刊种类 when '小低版' then 每期订报数 else 0 end) '小低',
sum(case 报刊种类 when '小中版' then 每期订报数 else 0 end) '小中',
sum(case 报刊种类 when '高中版' then 每期订报数 else 0 end) '高中'
from
(
select a.报刊种类 , 期数 = a.订报开始期 + b.id , a.每期订报数 from tb a , tmp b where a.订报开始期 + b.id <= a.订报结束期
) t
group by 期数
order by 期数drop table tb,tmp
/*
期数 小低 小中 高中
----------- ----------- ----------- -----------
1 900 200 0
2 900 287 0
3 900 287 0
4 900 287 0
5 900 287 0
6 900 287 0
7 900 287 0
8 900 287 0
9 900 287 0
10 900 287 0
11 900 287 0
12 900 287 0
13 900 287 0
14 0 287 0
15 0 287 0
16 0 287 0
17 0 287 0
18 0 287 0
19 0 287 0
20 0 287 0
21 0 287 0
22 0 287 0
23 0 287 0
24 0 287 0
25 0 287 0
26 0 287 45
27 0 0 45
28 0 0 45
29 0 0 45
30 0 0 45
31 0 0 45
32 0 0 45
33 0 0 45
34 0 0 45
35 0 0 45
36 0 0 45
37 0 0 45
38 0 0 45
39 0 0 45
40 0 0 45
41 0 0 45
42 0 0 45
43 0 0 45
44 0 0 45
45 0 0 45
46 0 0 45
47 0 0 45
48 0 0 45
49 0 0 45
50 0 0 45
51 0 0 45
52 0 0 45(所影响的行数为 52 行)*/
[/code]
create table tb(报刊种类 varchar(10) , 订报开始期 int, 订报结束期 int, 每期订报数 int)
insert into tb values('小低版' , 1 , 13 , 900)
insert into tb values('小中版' , 2 , 26 , 87 )
insert into tb values('高中版' , 26 , 52 , 45 )
insert into tb values('小中版' , 1 , 26 , 200)
goselect 期数 ,
sum(case 报刊种类 when '小低版' then 每期订报数 else 0 end) '小低',
sum(case 报刊种类 when '小中版' then 每期订报数 else 0 end) '小中',
sum(case 报刊种类 when '高中版' then 每期订报数 else 0 end) '高中'
from
(
select a.报刊种类 , 期数 = a.订报开始期 + b.id , a.每期订报数 from tb a ,
(
select 0 as id union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union
select 8 id union select 9 union select 10 union select 11 union select 12 union select 13 union select 14 union select 15 union
select 16 id union select 17 union select 18 union select 19 union select 20 union select 21 union select 22 union select 23 union
select 24 id union select 25 union select 26 union select 27 union select 28 union select 29 union select 30 union select 31 union
select 32 id union select 33 union select 34 union select 35 union select 36 union select 37 union select 38 union select 39 union
select 40 id union select 41 union select 42 union select 43 union select 44 union select 45 union select 46 union select 47 union
select 48 id union select 49 union select 50
) b
where a.订报开始期 + b.id <= a.订报结束期
) t
group by 期数
order by 期数drop table tb
/*
期数 小低 小中 高中
----------- ----------- ----------- -----------
1 900 200 0
2 900 287 0
3 900 287 0
4 900 287 0
5 900 287 0
6 900 287 0
7 900 287 0
8 900 287 0
9 900 287 0
10 900 287 0
11 900 287 0
12 900 287 0
13 900 287 0
14 0 287 0
15 0 287 0
16 0 287 0
17 0 287 0
18 0 287 0
19 0 287 0
20 0 287 0
21 0 287 0
22 0 287 0
23 0 287 0
24 0 287 0
25 0 287 0
26 0 287 45
27 0 0 45
28 0 0 45
29 0 0 45
30 0 0 45
31 0 0 45
32 0 0 45
33 0 0 45
34 0 0 45
35 0 0 45
36 0 0 45
37 0 0 45
38 0 0 45
39 0 0 45
40 0 0 45
41 0 0 45
42 0 0 45
43 0 0 45
44 0 0 45
45 0 0 45
46 0 0 45
47 0 0 45
48 0 0 45
49 0 0 45
50 0 0 45
51 0 0 45
52 0 0 45(所影响的行数为 52 行)*/