表的结构及内容T_Code    T_name
-----------------------------
   1        A
   1        B
   1        C
   2        A
   2        E
   2        F 
   3        D
   3        E  
------------------------------求Sql语句,能根据上表内容得到如下结果
T_Code    T_Name
------------------------------
   1        ABC
   2        AEF
   3        DE
------------------------------up 有分

解决方案 »

  1.   

    复杂查询把,第一列可以实现(用distinct)
    然后第二列用sum函数,条件是表里面的值为distinct第一列!
    具体语句可以实验的吗!呵呵
      

  2.   

    select distinct t_code,sum(t_name) from tablename
    where t_code=( 
      select distinct t_code from tablename
       )
      

  3.   

    bigery(bigery)不行吧,t_name 应该是整形才可以这样写呀!
    建个临时表试试!
      

  4.   

    楼上的不行,(sum只能对数值的,你那是字符)
    不会,哈哈,up
      

  5.   


    思路:
    select T_Code  from  tablename group by T_code 得到数据集:
       1
       2
       3
    select T_Name from tablename where T_Code=:n // n为1、2、3
    得到
    A  A  D
    B  E  E
    C  F最后字符串连接
      

  6.   

    group by  tcode 就可以呀
      

  7.   

    每次把数据库总体浏览,统计T_Code 里相同的数据的个数,再把对应的T_Name 道入变量StrA$中
    再输出便可.我做过的.
      

  8.   

    以上这个结果可以做到
    但是在查询分析器里是无法显示的
    这个结果存在
    但是只能打印输出
    如果你需要显示在屏幕上
    那只能用程序实现
    步骤如下
    你定义两个变量
    DECLARE @code int DECLARE @name varchar(500)
    set @name = '';
    select T_code,case when @code = T_code then @name + t_name
                       when @code <> T_code then set @code = T_code
                  end
    where ...
    group by ....以上代码未调试过,你自己写个程序试试看吧,
    其它方法也有,比如用do until object.eof  object.next ... loop 循环遍历,用case when then end 语句比较赋值等等
    以上语句用法可以查阅联机帮助
    希望可以帮到你
      

  9.   

    只要想到一般都可以实现!
    但是单用SQL返回数据记也许会比较困难!
    可以新建一个表,字符串连接
    haoguozhong(郝国忠) 的方法就可以!
      

  10.   

    在数据库里写一个函数
    Create   FUNCTION GETName(@yourname NVARCHAR(40))
    RETURNS NVARCHAR(800)
    AS
    BEGIN
      DECLARE @str NVARCHAR(800)
      
      SET @str=''  SELECT @str = @str + T_name
      FROM 表 WHERE T_Code=@yourname  RETURN @str
    END调用
    Adoquery1.close;
    Adoquery1.Text:='select T_Code,getname(T_name) from 表 group by T_Code order by T_Code '
    Open;
      

  11.   

    select distinct(T_name) from tablename 
    先取出不同的T_name, 然后
    for i:=0 to query1.recordcount-1 do
    begin
        if not query1.eof then
        begin
            tname:=query1.fieldbyname("T_name").asstring;
            sql:='select T_code from tablename '+''''+tname+'''';
            query2.sql.clear;
            query2.sql.add(sql);
            query2.sql.open;
            string1:='';
            for j:=0 to query2.recordcount-1 do
            begin
                string1:=string1+query2.fieldbyname("T_code").asstring;
                query2.movenext;
            end;
            sql2:='update tablename set tcode='+''''+string1+''''+' where t_name='+''''+tanme+''''; 
            query3.sql.clear;
            query3.sql.add(sql2);
            query3.execsql;
        end;
    end;    
      

  12.   

    我只能给你一个建议:我建议你首先将T_code选出来放到数组中或是一个堆栈或是一个队列。
    用两层循环,外层循环是数组中或是一个堆栈或是一个队列中的一个值,中间用adoquery控件
    用select 语句选出在用一个循环,把T_name累加起来,程序到此结束。
      

  13.   

    也可以用
    select distinct t_code,sum(t_name) from tablename
    where t_code=(select distinct t_code from tablename)
      

  14.   

    haoguozhong(郝国忠) 对的就是游标,循环
    或者借助临时表
      

  15.   

    拷,我自己写了一个很麻烦的存储过程,然后提问后别人教我一个简单的方法,都贴出来:
    create table table1(T_Code char(2),T_name char(5))
    insert into table1 values('1','A')
    insert into table1 values('1','B')
    insert into table1 values('1','C')
    insert into table1 values('2','A')
    insert into table1 values('2','E')
    insert into table1 values('2','F') 
    insert into table1 values('3','D')
    insert into table1 values('3','E') 
    insert into table1 values('3','f') 
    --我的存储过程
    create procedure strsum
    as
    begin
    declare @scode char(2),@sname char(5)--这两个参数用来保存插入结果集的值
    declare @code char(2), @name char(2)--这两个参数用来保存油标值
    declare temp_sor cursor for select * from table1 order by T_Code
    open temp_sor
    fetch next from temp_sor into @scode,@sname--取第一条记录值,放入@scode,@sname
    while @@FETCH_STATUS=0
    begin
      fetch next from temp_sor into @code,@name--从第二条开始循环
      if @@FETCH_STATUS=0
      begin
      if @code=@scode--如果相同,例如第二条还是1,就把@name加上去
        set @sname=rtrim(ltrim(@sname))+rtrim(ltrim(@name))
      else--如果不同,例如,取到2了,将@scode,@sname保存的结果插入临时表,且重新给@scode,@sname赋值
      begin
        if object_id('tempdb..#temp') is not null
           insert into #temp values(@scode,@sname)
        else
           select @scode as T_Code,@sname as T_name into #temp 
        set @scode=@code--重新给@scode,@sname赋值
        set @sname=@name
      end
      end
    end
    insert into #temp values(@scode,@sname)
    close temp_sor
    deallocate temp_sor
    print @name
    end
    select * from #temp
    go
    --执行存储过程
    exec strsum
    结果集体如下:
    2  AEF  
    3  DEf
    1  ABC
      

  16.   

    高手的办法:
    --1.创建一个合并的函数
    create function fmerg(@id char(1))
    returns varchar(8000)
    as
    begin
    declare @str varchar(8000)
    set @str=''
    select @str=@str+ltrim(rtrim(T_name)) from table1 where T_code=@id
    --set @str=right(@str,len(@str)-1)
    return(@str)
    End
    go--调用自定义函数得到结果
    select distinct T_code,dbo.fmerg(T_code) from table1详细见:
    http://expert.csdn.net/Expert/topic/2299/2299635.xml?temp=.5711939
    我的存储过程哪个缺陷已经去掉了