欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

*sql实例有关问题*多谢

更新时间: 2014-01-05 02:17:03 责任编辑: Author_N1

 

****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 then FName+',' else '' end) +
       MAX(case when FSec=6 then FName+',' else '' end) +
       MAX(case when FSec=7 then FName+',' else '' end) +
       MAX(case when FSec=8 then FName+',' else '' end) +
       MAX(case when FSec=9 then FName+',' else '' end) +
       MAX(case when FSec=10 then FName+',' else '' end) as fname
                   
from table1
group by FcaID
)t
/*
FcaID fname
001 卡片1,卡片2
002 卡片3,卡片4,卡片5
*/

--参考方法--


有表tb, 如下:
id    value
----- ------
1     aa
1     bb
2     aaa
2     bbb
2     ccc
需要得到结果:
id     values
------ -----------
1      aa,bb
2      aaa,bbb,ccc
即, group by id, 求 value 的和(字符串相加)

1. 旧的解决方法

-- 1. 创建处理函数
CREATE FUNCTION dbo.f_str(@id int)
RETURNS varchar(8000)
AS
BEGIN
    DECLARE @r varchar(8000)
    SET @r = ''
    SELECT @r = @r + ',' + value
    FROM tb
    WHERE id=@id
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 02:17:03
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/7954/
本文WWW.DOC100.NET DOC100.NET版权所有。