日期:2014-05-19  浏览次数:20542 次

求Sql查询语句
表一:

姓名     编号

张三     0001
张三     0002          
李四     0003
王五     0004
赵六     0005
赵六     0006
赵六     0007

表二:

b1

年份     0001     0002     0003   0004     0005     0006     0007
2005         1           2           3         4           5           6           7
2006         8           9           10       11         12         13         14
2007         15         16         17       18         19         20         21

想得到这样的输出:

姓名     编号     2007

张三     0001         31
李四     0003         10
王五     0004         11
赵六     0005         60

------解决方案--------------------
那李四 和王五应该是17 18 啊
------解决方案--------------------
--创建测试环境
create table a(姓名 varchar(10), 编号 varchar(10))
create table b(年份 int, [0001] int, [0002] int, [0003] int,[0004] int,[0005] int
,[0006] int,[0007] int)
--插入测试数据
insert a(姓名,编号)
select '张三 ', '0001 ' union all
select '张三 ', '0002 ' union all
select '李四 ', '0003 ' union all
select '王五 ', '0004 ' union all
select '赵六 ', '0005 ' union all
select '赵六 ', '0006 ' union all
select '赵六 ', '0007 '
insert b(年份,[0001],[0002],[0003],[0004],[0005],[0006],[0007])
select '2005 ', '1 ', '2 ', '3 ', '4 ', '5 ', '6 ', '7 ' union all
select '2006 ', '8 ', '9 ', '10 ', '11 ', '12 ', '13 ', '14 ' union all
select '2007 ', '15 ', '16 ', '17 ', '18 ', '19 ', '20 ', '21 '

--求解过程
select a.姓名,sum(b.num) as [2007]
from a
join (
select 年份,[0001] as num, '0001 ' as 编号 from b union all
select 年份,[0002], '0002 ' as 编号 from b union all
select 年份,[0003], '0003 ' as 编号 from b union all
select 年份,[0004], '0004 ' as 编号 from b union all
select 年份,[0005], '0005 ' as 编号 from b union all
select 年份,[0006], '0006 ' as 编号 from b union all
select 年份,[0007], '0007 ' as 编号 from b
) b on a.编号 = b.编号
where b.年份 = 2007
group by a.姓名
order by a.姓名


--删除测试环境
drop table a,b

/*--测试结果
姓名 2007
---------- -----------
李四 17
王五 18
张三 31
赵六 60

(所影响的行数为 4 行)
*/


------解决方案--------------------
--有事先写到这里

create table A(姓名 varchar(20), 编号 varchar(20))
insert A se