首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 能否用SQL语句实现结果集合的拼接 [已结贴,结贴人:try__again]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-17 14:31:26 楼主
    比如:有张表里的数据是

    1  aaa
    1  bbb
    1  ccc

    其中aaa,bbb,ccc都是varchar类型

    想通过一条语句得到aaabbbcccc这个结果

    不知道我描述的是否够清楚
    200  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-17 14:39:471楼 得分:20
    Delphi(Pascal) code
    var mNo : String; begin //假定A是得到后查询结果 //使用下面的语句 with A do begin mNo=''; first; while not eof do begin mNo := mNo+ Trim(FieldByName('OrderNo').AsString); next; end; end; end;
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-17 15:00:532楼 得分:0
    樓主用存儲過程吧
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-17 15:16:283楼 得分:30
    SQL code
    -- 示例数据 DECLARE @t TABLE(id int, value varchar(10)) INSERT @t SELECT 1, 'aaa' UNION ALL SELECT 1, 'bbb' UNION ALL SELECT 1, 'ccc' -- 查询处理 SELECT * FROM( SELECT DISTINCT id FROM @t )A OUTER APPLY( SELECT [values]= STUFF(REPLACE(REPLACE( ( SELECT value FROM @t N WHERE id = A.id FOR XML AUTO ), '<N value="', ''), '"/>', ''), 1, 1, '') )N
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • RoverX
    • 等级:
    发表于:2008-06-17 15:55:014楼 得分:0
    SQL Server 比较多
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • RoverX
    • 等级:
    发表于:2008-06-17 15:56:435楼 得分:5
    http://topic.csdn.net/u/20080612/22/c850499f-bce3-4877-82d5-af2357857872.html
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-17 18:14:496楼 得分:0
    MSSQL版的中国风已经整理好了,链接同上,希望大家看一下!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-17 18:57:457楼 得分:0
    建立函数后,一条SQL语句能够实现...
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-17 19:15:568楼 得分:0
    新版主很不错呀,现在每天都有推荐的了,呵
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-17 20:16:299楼 得分:15
    --首先在数据库的查询分析器上,创建用户自定义函数
    --drop function getP
    go
    create function getP
    (@name as nvarchar(20))
    returns nvarchar(1000)
    as
    begin
      declare @sql nvarchar(4000)
    set @sql=''
    select @sql= @sql+name from table2 where type=@name
    return substring(@sql,1,len(@sql)-1)
    end
    go

    利用自定义函数可以合并相同记录的。没办法贴图,可惜了。

    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-17 20:28:2510楼 得分:5
    不错
    create function getP
    (@name as nvarchar(20))
    returns nvarchar(1000)
    as
    begin
      declare @sql nvarchar(4000)
    set @sql=''
    select @sql= @sql+name from table2 where type=@name
    return substring(@sql,1,len(@sql)-1)
    end
    go
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-17 20:54:2611楼 得分:0
    终究 长度是有限制的 这样做有什么意义吗?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-17 21:07:2012楼 得分:15
    if object_id('tempdb.dbo.#temp')>0
      drop table #temp
    create table #temp (t1 varchar(1),t varchar(4))
    insert into #temp
    select '1','aaa'
    insert into #temp
    select '2','bbb'
    insert into #temp
    select '3','ccc'

    select * from #temp

    declare @s varchar(15),
            @s1 varchar(15)
    select @s1=''

    declare ss cursor
    for
      select t from #temp
    open ss

    fetch ss into @s                                     
    while(@@FETCH_STATUS=0)
    BEGIN
      select @s1=@s1+@s
      fetch ss into @s

     
    END

    select @s1

    close ss

    deallocate ss

    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-17 21:40:5513楼 得分:0
    终究 长度是有限制的 这样做有什么意义吗?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-17 22:13:4214楼 得分:0
    比较赞成用游标~~~~~~
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-17 22:36:2415楼 得分:0
    顶~~~~~~~~~~~~~~~~·
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-17 23:12:0516楼 得分:0
    游标吧
    不过字符串连接的话很容易溢出的
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-18 01:40:1417楼 得分:15
    一条语句写出来的未必就是最好的。这个问题最适合的应该是用递规查询变量。


    sql 2k

    SQL code
    DECLARE @t TABLE(id int, value varchar(10)) INSERT @t SELECT 1, 'aaa' UNION ALL SELECT 1, 'bbb' UNION ALL SELECT 1, 'ccc' DECLARE @s VARCHAR(8000) SELECT @s=ISNULL(@s,'')+value FROM @t SELECT @s



    sql 2005

    SQL code
    DECLARE @t TABLE(id int, value varchar(10)) INSERT @t SELECT 1, 'aaa' UNION ALL SELECT 1, 'bbb' UNION ALL SELECT 1, 'ccc' SELECT CAST((SELECT * FROM @t FOR XML RAW) AS XML).query('for $v in //row/@value return string($v)')


    当然,写法还有很多,不一一列了。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-18 01:40:5818楼 得分:5
    05中可以用nvarchar(max)
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-18 01:41:1719楼 得分:0
    varchar(max),打错了。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-18 08:39:4520楼 得分:0
    引用 17 楼 fcuandy 的回复:
    一条语句写出来的未必就是最好的。这个问题最适合的应该是用递规查询变量。


    sql 2k


    SQL codeDECLARE @t TABLE(id int, value varchar(10))
    INSERT @t SELECT 1, 'aaa'
    UNION ALL SELECT 1, 'bbb'
    UNION ALL SELECT 1, 'ccc'


    DECLARE @s VARCHAR(8000)
    SELECT @s=ISNULL(@s,'')+value FROM @t
    SELECT @s


    sql 2005


    SQL codeDECLARE @t TABLE(id int, value varchar(10))
    INSERT @t SEL…


    17楼的说的内容较合适;
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-18 08:40:2521楼 得分:0
    fcuandy的方法比较好
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-18 08:51:0722楼 得分:0
    fcuandy老兄很久不见!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-18 08:53:3523楼 得分:0
    该回复于2008-06-24 10:07:33被版主删除
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-18 09:18:3724楼 得分:0
    引用 22 楼 liangpei2008 的回复:
    fcuandy老兄很久不见!


    前段时间搬了住处没接好宽代,呵呵
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-18 09:51:2225楼 得分:15
    SQL code
    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 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

    http://blog.csdn.net/zhou968/archive/2008/06/13/2543729.aspx
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • rczjp
    • 等级:
    发表于:2008-06-18 10:11:4826楼 得分:0
    图图
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-18 10:56:3527楼 得分:0
    在此的数据库都很强呀,学习了。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-18 11:26:0028楼 得分:0
    引用 26 楼 rczjp 的回复:

    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-18 11:52:5829楼 得分:0
    数据库使用变幻莫测,
    数据库高手入林,
    数据库学习永无止境!

    谢谢高人的源码,收藏,慢慢学习。。。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-18 12:56:1630楼 得分:0
    引用 1 楼 yangkunjie 的回复:
    Delphi(Pascal) codevarmNo : String;begin//假定A是得到后查询结果//使用下面的语句withAdobeginmNo=''; 
      first;whilenoteofdobeginmNo :=mNo+Trim(FieldByName('OrderNo').AsString);
          next;end;end;end;


    这样的方法可能会改动很大,我原来也想过

    我的实际情况

    1 aaa 10
    1 bbb 15
    1 ccc 16

    需要的结果是统计1所对应的记录

    10, 15, 16 是数字,已经用sum实现了求和过程;aaa, bbb, ccc是字符串,希望能查找到的结果是“aaa, bbb, ccc”,
    我的想法是最好能在原先sql的基础上实现这个目标, 请指教
    修改 删除 举报 引用 回复