高分求救:急!如何写该储存过程!
表一:
姓名 一月 二月 三月 四月
----------------------------------------
张一 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 int)
insert t1
select 'zy ',5,1,null,2
union
select 'zs ',1,1,3,2
union
select 'zw ',null,3,2,2
create table t2(n varchar(10),d varchar(10))
insert t2
select 'zy ', 'bj '
union
select 'zs ', 'nj '
union
select 'lw ', 'nc '
union
select 'zw ', 'bh '
union
select 'll ', 'nn '
select b.n,dbo.f2(b.n),isnull(rtrim(c1+c2+c3+c4)+ 'yuan ', ' '),b.d
from t1 a , t2 b where a.n =* b.n
create function f2(@id varchar(10))
returns varchar(30)
as
begin
declare @str_month varchar(100)
select @str_month = case when c1 is not null then '1、 ' else ' ' end +
case when c2 is not null then '2、 ' else ' ' end +
case when c3 is not null then '3、 ' else ' ' end +
case when c4 is not null then '4、 ' else ' ' end
from t1 where n = @id
set @str_month = stuff(@str_month,len(@str_month),1, 'yue ')
return @str_month
end