日期:2014-05-18  浏览次数:20754 次

报表问题,比较急..
A表列如下:
ID   UserName   UserSN   Tel   Adress   Mark
B表列如下:
ID   UserSN   WaterLevel   WaterKind   Percent  
连接两个表时,A与B是一对多的关系(一个用户对应多种用水性质),所以连接出来后会出现多条同一用户的记录,只是WaterKind(用水性质)   Percent(所占百分比)两项不同,现在需要把这些同一用户的记录合并为一条,如何实现?
比如:
ID   UserName   UserSN     Tel     Adress   Mark   WaterLevel   WaterKind   Percent  
5       aaaa           586         00         666         无           1                 工业用水       20%
5       aaaa           586         00         666         无           1                 生活用水       80%
或许会存在三种用水性质(也就是三条记录),现在需要变为一条记录(无论以什么方式实现,但表达的信息必须含有两种(或三种)用水性质和百分比).
谢谢各位!!  


------解决方案--------------------
create table A(ID int,UserName varchar(10),UserSN varchar(20),Tel varchar(20),Adress varchar(20),Mark varchar(20))
create table B(ID int,UserSN varchar(20),WaterLevel int,WaterKind varchar(20),[Percent] varchar(20))
insert into A select 5, 'aaaa ', '586 ', '00 ', '666 ', '无 '
insert into B select 5, '586 ',1, '工业用水 ', '20% '
insert into B select 5, '586 ',1, '生活用水 ', '80% '
go

declare @s varchar(8000)
set @s= ' '
select @s=@s+ ',[ '+WaterKind+ ':Level] =max(case WaterKind when ' ' '+WaterKind+ ' ' ' then WaterLevel end) '
+ ',[ '+WaterKind+ ':Percnet]=max(case WaterKind when ' ' '+WaterKind+ ' ' ' then [Percent] end) '
from B group by WaterKind

set @s= 'select A.ID,A.UserName,A.UserSN,A.Tel,A.Adress,A.Mark '
+@s
+ ' from A,B where A.ID=B.ID and A.UserSN=B.UserSN '
+ ' group by A.ID,A.UserName,A.UserSN,A.Tel,A.Adress,A.Mark '

exec(@s)
go

/*
ID UserName UserSN Tel Adress Mark 工业用水:Level 工业用水:Percnet 生活用水:Level 生活用水:Percnet
---- ---------- -------- ----- ------- ------ -------------- ---------------- -------------- ----------------
5 aaaa 586 00 666 无 1 20% 1 80%
*/

drop table A,B
go
------解决方案--------------------
http://www.wave12.com/web/home.asp
------解决方案--------------------
数据库处理,不如到前台处理方便,建议。
------解决方案--------------------
就如一楼,创建一个内存表,把处理得到结果存入内存表后再显示出来就可以了