求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 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 '
create table B(年份 int, [0001] int, [0002] int, [0003] int, [0004] int, [0005] int, [0006] int, [0007] int)
insert B 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
create proc pc(@姓名 varchar(20), @ret int output)
as
begin
declare @sql nvarchar(4000)
set @sql= 'select @ret= '
select @sql=@sql+quotename(编号)+ '+ ' from A where 姓名=@姓名
select @sql=left(@sql, len(@sql)-1), @sql=@sql+ ' from B where 年份=2007 '
exec sp_executesql @sql, N '@ret int output ', @ret output
end
declare @ret int
exec pc '赵六 ', @ret out
select @ret