高分求救:急!如何写该储存过程!
表一:
姓名 一月 二月 三月 四月
----------------------------------------
张一 5 1 2
张四 1 1 3 2
张五 3 2 2
表二:
姓名 住址
---------------------------------------
张一 北京
张四 南京
李五 南昌 (该信息在表一无记录)
张五 北海
李六 南宁 (该信息在表一无记录)
有上面两组数据,我想输出的格式为:
姓名 月份 总额 住址
---------------------------------------
张一 1、2、4月 8元 北京
张四 1、2、3、4月 7元 南京
李五 南昌
张五 2、3、4月 7元 北海
李六 南宁
也就是说表一中如果没有信息,则相应项目输出为空;并将表一中有数据的月份进行汇总。
请问在MS-SQL中如何写该储存过程,谢谢。
------解决方案--------------------select a.姓名,(case when b.一月 is not null then '1、 ')+(case when b.二月 is not null then '2、 ')+(case when b.三月 is not null then '3、 ')+(case when b.四月 is not null then '4 ')+ '月 ' as 月份,
sum(b.一月+b.二月+b.三月+b.四月) as 总额,a.住址 from 表二 a left join 表一 b on
a.姓名=b.姓名 group by a.姓名
------解决方案--------------------create table T1(姓名 varchar(10), 一月 int, 二月 int, 三月 int, 四月 int)
insert T1 select '张一 ', 5, 1, 0, 2
union all select '张四 ', 1, 1, 3, 2
union all select '张五 ', 0, 3, 2, 2
create table T2(姓名 varchar(10), 住址 varchar(20))
insert T2 select '张一 ', '北京 '
union all select '张四 ', '南京 '
union all select '李五 ', '南昌 '
union all select '张五 ', '北海 '
union all select '李六 ', '南宁 '
select T2.姓名,
月份= isnull(reverse(stuff(reverse(case when 一月> 0 then '1, ' else ' ' end+
case when 二月> 0 then '2, ' else ' ' end+
case when 三月> 0 then '3, ' else ' ' end+
case when 四月> 0 then '4, ' else ' ' end),1,1, ' '))+ '月 ', ' '),
总额=isnull(rtrim(一月+二月+三月+四月)+ '元 ', ' '),
住址
from T2 left join T1 on T2.姓名=T1.姓名
drop table T1,T2
--结果
姓名 月份 总额 住址
---------- --------- -------------- -------------
张一 1,2,4月 8元 北京
张四 1,2,3,4月 7元 南京
李五 南昌
张五 2,3,4月 7元 北海
李六 南宁
(所影响的行数为 5 行)
------解决方案--------------------create table t1(n varchar(10),c1 int,c2 int,c3 int,c4