ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 2290|回复: 4

[求助] 请问如何把一列的值连接成为一个字符串?

[复制链接]

TA的精华主题

TA的得分主题

发表于 2012-8-26 18:30 | 显示全部楼层 |阅读模式
本帖最后由 zjszjs27 于 2012-8-26 18:50 编辑

比如有一张表TABLE1:      列名    A                   B                      C
                                  行号  1      SQL              QW                AAA
                                           2      SQL              QW                BBB
                                           3     SQL                 QW              CCC
                                         4       ASD              WE                SSS
                                        5        ASD             WE                FFF
我想得到如下的结果:
                                        A                    B                   C
                                       SQL              QW            AAA,BBB,CCC
                                      ASD               WE             SSS,FFF
请问,这个SQL代码怎么写啊?请老师帮帮忙!!!

TA的精华主题

TA的得分主题

发表于 2012-8-27 08:12 | 显示全部楼层
http://club.excelhome.net/forum.php?mod=viewthread&tid=866510&page=1#pid5924200

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-8-27 11:16 | 显示全部楼层
好吧,看来只能用函数做了。。。。。。。

TA的精华主题

TA的得分主题

发表于 2012-8-27 19:16 | 显示全部楼层
[code=sql]--> --> (Roy)生成測試數據

if not object_id('Tab') is null
    drop table Tab
Go
Create table Tab(
[Col1] int,
[Col2] nvarchar(1)
)
Insert Tab
select 1,N'a' union all
select 1,N'b' union all
select 1,N'c' union all
select 2,N'd' union all
select 2,N'e' union all
select 3,N'f'
Go

--合并表:

--SQL2000用函数:

go
if object_id('F_Str') is not null
    drop function F_Str
go
create function F_Str(@Col1 int)
returns nvarchar(100)
as
begin
    declare @S nvarchar(100)
    select @S=isnull(@S+',','')+Col2 from Tab where Col1=@Col1
    return @S
end
go
Select distinct Col1,Col2=dbo.F_Str(Col1) from Tab

go

--SQL2005用XML:

--方法1:

select
    a.Col1,
    Col2=stuff(b.Col2.value('/R[1]','nvarchar(max)'),1,1,'')
from
    (select distinct COl1 from Tab) a
Cross apply
    (select
        COl2=(select N','+Col2 from Tab where Col1=a.COl1
                For XML PATH(''), ROOT('R'), TYPE))b

--方法2:

select
    a.Col1,
    COl2=replace(b.Col2.value('/Tab[1]','nvarchar(max)'),char(44)+char(32),char(44))
from
    (select distinct COl1 from Tab) a
cross apply
    (
    select
        Col2=(select COl2 from Tab  where COl1=a.COl1 FOR XML AUTO, TYPE)
                .query(' <Tab>
                {for $i in /Tab[position() <last()]/@COl2 return concat(string($i),",")}
                {concat("",string(/Tab[last()]/@COl2))}
                </Tab>')
    )b

--SQL05用CTE:

;with roy as(
    select
        Col1,
        Col2,
        row=row_number()over(partition by COl1 order by COl1)
    from
        Tab
        )
,Roy2 as
(
select
    COl1,
    cast(COl2 as nvarchar(100))COl2,row
from
    Roy
where
    row=1
union all
select
    a.Col1,
    cast(b.COl2+','+a.COl2 as nvarchar(100)),a.row
from
    Roy a
join
    Roy2 b
on
    a.COl1=b.COl1 and a.row=b.row+1
    )
select
    Col1,
    Col2
from
    Roy2 a
where
    row=(
        select
            max(row)
        from
            roy
        where Col1=a.COl1
        )
order by
    Col1
option (MAXRECURSION 0)


生成结果:
/*
Col1        COl2
----------- ------------
1          a,b,c
2          d,e
3          f

(3 行受影响)
*/
[/code]

TA的精华主题

TA的得分主题

发表于 2012-8-27 19:21 | 显示全部楼层
TABLE1是符合数据库范式的
你想要的结果是违反数据库范式的
使用这样的结果在以后的数据处理时会遇到很多的麻烦
自寻烦恼
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2025-1-8 13:15 , Processed in 0.020516 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表