日期:2014-05-17  浏览次数:20378 次

****SQL实例问题******求助*****谢谢!
现在有一张数据表:Table1
FcaID  FSec  FName
001     1    卡片1
001     2    卡片2
002     1    卡片3
002     2    卡片4
002     3    卡片5

说明:同一个FcaID可能对应着N条记录(1=<N<=10)

如果不通过写存储过程或函数,只用sql,能否实现以下取数:
FcaID     FName
001    卡片1卡片2    
002    卡片3卡片4卡片5

SqlServer2000,多谢~~~~~~

------解决方案--------------------
select FcaID,
      max(case when FSec=1 then  FName else '' end)+
      max(case when FSec=2 then  FName else '' end)+
      max(case when FSec=3 then  FName else '' end)+
...............
      max(case when FSec=9 then  FName else '' end)+
      max(case when FSec=10 then  FName else '' end)
from Table1 group by FcaID
------解决方案--------------------
2000的静态行列转换应该可以实现
------解决方案--------------------

create table table1(FcaID varchar(10), FSec int, FName varchar(20))

insert into table1
select '001',     1    ,'卡片1' union all
select '001',     2    ,'卡片2' union all
select '002',     1    ,'卡片3' union all
select '002',     2    ,'卡片4' union all
select '002',     3    ,'卡片5'
go


select FcaID,left(FName,LEN(fname)-1) as fname
from 
(
select FcaID,
       MAX(case when FSec=1 then FName+',' else '' end) +
       MAX(case when FSec=2 then FName+',' else '' end) +
       MAX(case when FSec=3 then FName+',' else '' end) +
       MAX(case when FSec=4 then FName+',' else '' end) +
       MAX(case when FSec=5 the